From 903bbac84e39c932f61d8bd11c34405f4be10ea7 Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Wed, 17 May 2023 16:37:19 +0200 Subject: [PATCH 1/8] created new uri_resolution crate --- packages/uri-resolution/Cargo.toml | 18 ++++++++++++++++++ packages/uri-resolution/src/lib.rs | 0 2 files changed, 18 insertions(+) create mode 100644 packages/uri-resolution/Cargo.toml create mode 100644 packages/uri-resolution/src/lib.rs diff --git a/packages/uri-resolution/Cargo.toml b/packages/uri-resolution/Cargo.toml new file mode 100644 index 0000000000..db36230206 --- /dev/null +++ b/packages/uri-resolution/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "polywrap_uri_resolution" +description = "Core types of Polywrap URI resolution" + +version.workspace = true +edition.workspace = true +rust-version.workspace = true +license.workspace = true + +[dependencies] +polywrap_core.workspace = true +thiserror.workspace = true +regex.workspace = true +wrap_manifest_schemas.workspace = true +polywrap_msgpack.workspace = true +serde.workspace = true +serde_json.workspace = true +jsonschema.workspace = true diff --git a/packages/uri-resolution/src/lib.rs b/packages/uri-resolution/src/lib.rs new file mode 100644 index 0000000000..e69de29bb2 From 8ba340e874a1766818243a6e7baa4d5bff2abeaa Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Wed, 17 May 2023 16:38:08 +0200 Subject: [PATCH 2/8] moved UriResolverHandler to separate file --- packages/core/src/client.rs | 3 ++- packages/core/src/lib.rs | 1 + packages/core/src/resolvers/uri_resolver.rs | 10 +--------- packages/core/src/uri_resolver_handler.rs | 9 +++++++++ 4 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 packages/core/src/uri_resolver_handler.rs diff --git a/packages/core/src/client.rs b/packages/core/src/client.rs index 1645ba03a9..b498ee442c 100644 --- a/packages/core/src/client.rs +++ b/packages/core/src/client.rs @@ -2,9 +2,10 @@ use std::sync::Arc; use crate::uri::Uri; use crate::interface_implementation::InterfaceImplementations; -use crate::resolvers::uri_resolver::{UriResolverHandler, UriResolver}; +use crate::resolvers::uri_resolver::UriResolver; use crate::env::Envs; use crate::invoker::Invoker; +use crate::uri_resolver_handler::UriResolverHandler; use crate::wrap_invoker::WrapInvoker; use crate::wrap_loader::WrapLoader; diff --git a/packages/core/src/lib.rs b/packages/core/src/lib.rs index 7a572be88c..f31a66b937 100644 --- a/packages/core/src/lib.rs +++ b/packages/core/src/lib.rs @@ -10,4 +10,5 @@ pub mod package; pub mod file_reader; pub mod env; pub mod interface_implementation; +pub mod uri_resolver_handler; pub mod resolvers; diff --git a/packages/core/src/resolvers/uri_resolver.rs b/packages/core/src/resolvers/uri_resolver.rs index b966066e83..27d22a0c5c 100644 --- a/packages/core/src/resolvers/uri_resolver.rs +++ b/packages/core/src/resolvers/uri_resolver.rs @@ -11,14 +11,6 @@ use super::uri_resolver_aggregator::UriResolverAggregator; use super::uri_resolver_like::UriResolverLike; use super::wrapper_resolver::WrapperResolver; -pub trait UriResolverHandler { - fn try_resolve_uri( - &self, - uri: &Uri, - resolution_context: Option<&mut UriResolutionContext>, - ) -> Result; -} - pub trait UriResolver: Send + Sync + Debug { fn try_resolve_uri( &self, @@ -62,4 +54,4 @@ impl From for Arc { }, } } -} \ No newline at end of file +} diff --git a/packages/core/src/uri_resolver_handler.rs b/packages/core/src/uri_resolver_handler.rs new file mode 100644 index 0000000000..93d2150729 --- /dev/null +++ b/packages/core/src/uri_resolver_handler.rs @@ -0,0 +1,9 @@ +use crate::{resolvers::uri_resolution_context::{UriResolutionContext, UriPackageOrWrapper}, error::Error, uri::Uri}; + +pub trait UriResolverHandler { + fn try_resolve_uri( + &self, + uri: &Uri, + resolution_context: Option<&mut UriResolutionContext>, + ) -> Result; +} From 2887e5e07babbfbba5da99a632763d7a7c3233b6 Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Wed, 17 May 2023 16:41:19 +0200 Subject: [PATCH 3/8] renamed uri resolution crate to just resolution --- packages/{uri-resolution => resolution}/Cargo.toml | 2 +- packages/resolution/src/lib.rs | 14 ++++++++++++++ packages/uri-resolution/src/lib.rs | 0 3 files changed, 15 insertions(+), 1 deletion(-) rename packages/{uri-resolution => resolution}/Cargo.toml (92%) create mode 100644 packages/resolution/src/lib.rs delete mode 100644 packages/uri-resolution/src/lib.rs diff --git a/packages/uri-resolution/Cargo.toml b/packages/resolution/Cargo.toml similarity index 92% rename from packages/uri-resolution/Cargo.toml rename to packages/resolution/Cargo.toml index db36230206..6a98c90e89 100644 --- a/packages/uri-resolution/Cargo.toml +++ b/packages/resolution/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "polywrap_uri_resolution" +name = "polywrap_resolution" description = "Core types of Polywrap URI resolution" version.workspace = true diff --git a/packages/resolution/src/lib.rs b/packages/resolution/src/lib.rs new file mode 100644 index 0000000000..e572df8845 --- /dev/null +++ b/packages/resolution/src/lib.rs @@ -0,0 +1,14 @@ +pub mod uri_resolver_aggregator_base; +pub mod uri_resolver_like; +pub mod uri_resolver; +pub mod uri_resolution_context; +pub mod static_resolver; +pub mod uri_resolver_aggregator; +pub mod wrapper_resolver; +pub mod resolver_with_history; +pub mod helpers; +pub mod get_uri_resolution_path; +pub mod package_resolver; +pub mod redirect_resolver; +pub mod recursive_resolver; +pub mod with_loop_guard_resolver; \ No newline at end of file diff --git a/packages/uri-resolution/src/lib.rs b/packages/uri-resolution/src/lib.rs deleted file mode 100644 index e69de29bb2..0000000000 From 410dec1356396e76623ea072cdd269ff25b5dc71 Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Wed, 17 May 2023 18:51:14 +0200 Subject: [PATCH 4/8] moved all resolvers in core to resolvers crate --- packages/builder/src/client_config_builder.rs | 6 +- packages/builder/src/helpers.rs | 11 ++-- packages/builder/src/types.rs | 9 ++- packages/client/src/client.rs | 4 +- packages/core/src/resolvers/mod.rs | 10 ---- .../core/src/resolvers/package_resolver.rs | 33 ----------- .../core/src/resolvers/redirect_resolver.rs | 44 --------------- .../src/resolvers/resolver_with_history.rs | 33 ----------- packages/core/src/resolvers/uri_resolver.rs | 41 -------------- .../core/src/resolvers/uri_resolver_like.rs | 14 ----- .../core/src/resolvers/wrapper_resolver.rs | 44 --------------- .../resolvers/src/extendable_uri_resolver.rs | 3 +- packages/resolvers/src/lib.rs | 10 +++- packages/resolvers/src/package_resolver.rs | 42 ++++++++++++++ .../src}/recursive_resolver.rs | 22 ++------ packages/resolvers/src/redirect_resolver.rs | 55 +++++++++++++++++++ .../src}/static_resolver.rs | 6 +- .../src}/uri_resolver_aggregator.rs | 33 ++++------- .../src}/uri_resolver_aggregator_base.rs | 12 ++-- .../src}/with_loop_guard_resolver.rs | 21 +++---- packages/resolvers/src/wrapper_resolver.rs | 55 +++++++++++++++++++ 21 files changed, 210 insertions(+), 298 deletions(-) delete mode 100644 packages/core/src/resolvers/package_resolver.rs delete mode 100644 packages/core/src/resolvers/redirect_resolver.rs delete mode 100644 packages/core/src/resolvers/resolver_with_history.rs delete mode 100644 packages/core/src/resolvers/uri_resolver_like.rs delete mode 100644 packages/core/src/resolvers/wrapper_resolver.rs create mode 100644 packages/resolvers/src/package_resolver.rs rename packages/{core/src/resolvers => resolvers/src}/recursive_resolver.rs (78%) create mode 100644 packages/resolvers/src/redirect_resolver.rs rename packages/{core/src/resolvers => resolvers/src}/static_resolver.rs (98%) rename packages/{core/src/resolvers => resolvers/src}/uri_resolver_aggregator.rs (78%) rename packages/{core/src/resolvers => resolvers/src}/uri_resolver_aggregator_base.rs (88%) rename packages/{core/src/resolvers => resolvers/src}/with_loop_guard_resolver.rs (50%) create mode 100644 packages/resolvers/src/wrapper_resolver.rs diff --git a/packages/builder/src/client_config_builder.rs b/packages/builder/src/client_config_builder.rs index 727553fdd3..1d8597b97f 100644 --- a/packages/builder/src/client_config_builder.rs +++ b/packages/builder/src/client_config_builder.rs @@ -3,7 +3,7 @@ use std::{collections::HashMap, sync::{Arc}}; use polywrap_core::{ client::{ClientConfig, UriRedirect}, env::{Env,Envs}, - resolvers::{uri_resolver_like::UriResolverLike}, + resolvers::uri_resolver::UriResolver, uri::Uri, wrapper::Wrapper, package::WrapPackage }; @@ -298,7 +298,7 @@ impl ClientBuilder for BuilderConfig { self } - fn add_resolver(&mut self, resolver: UriResolverLike) -> &mut Self { + fn add_resolver(&mut self, resolver: Arc) -> &mut Self { match self.resolvers.as_mut() { Some(resolvers) => { resolvers.push(resolver); @@ -311,7 +311,7 @@ impl ClientBuilder for BuilderConfig { self } - fn add_resolvers(&mut self, resolvers: Vec) -> &mut Self { + fn add_resolvers(&mut self, resolvers: Vec>) -> &mut Self { for resolver in resolvers.into_iter() { self.add_resolver(resolver); } diff --git a/packages/builder/src/helpers.rs b/packages/builder/src/helpers.rs index 61ebb44c7a..35ffe0fdb5 100644 --- a/packages/builder/src/helpers.rs +++ b/packages/builder/src/helpers.rs @@ -3,13 +3,10 @@ use std::sync::Arc; use polywrap_core::{ client::ClientConfig, resolvers::{ - recursive_resolver::RecursiveResolver, - static_resolver::{StaticResolver, StaticResolverLike}, uri_resolver::UriResolver, - uri_resolver_like::UriResolverLike, }, }; -use polywrap_resolvers::extendable_uri_resolver::ExtendableUriResolver; +use polywrap_resolvers::{extendable_uri_resolver::ExtendableUriResolver, static_resolver::{StaticResolverLike, StaticResolver}, recursive_resolver::RecursiveResolver}; use serde_json::Value; use crate::types::BuilderConfig; @@ -50,9 +47,9 @@ pub fn build_resolver(builder: BuilderConfig) -> ClientConfig { let static_resolver = StaticResolver::from(static_resolvers); let extendable_resolver = ExtendableUriResolver::new(None); - let resolvers = vec![ - UriResolverLike::Resolver(Arc::new(static_resolver)), - UriResolverLike::Resolver(Arc::new(extendable_resolver)), + let resolvers: Vec> = vec![ + Arc::new(static_resolver), + Arc::new(extendable_resolver), ]; ClientConfig { diff --git a/packages/builder/src/types.rs b/packages/builder/src/types.rs index 953e74e729..2be7505a24 100644 --- a/packages/builder/src/types.rs +++ b/packages/builder/src/types.rs @@ -3,9 +3,8 @@ use std::sync::{Arc}; use polywrap_core::{ interface_implementation::InterfaceImplementations, env::{Envs,Env}, - resolvers::{uri_resolver_like::UriResolverLike}, uri::Uri, - client::{UriRedirect, ClientConfig}, package::WrapPackage, wrapper::Wrapper + client::{UriRedirect, ClientConfig}, package::WrapPackage, wrapper::Wrapper, resolvers::uri_resolver::UriResolver }; #[derive(Clone)] @@ -15,7 +14,7 @@ pub struct BuilderConfig { pub wrappers: Option)>>, pub packages: Option)>>, pub redirects: Option>, - pub resolvers: Option>, + pub resolvers: Option>>, } pub trait ClientBuilder { @@ -48,8 +47,8 @@ pub trait ClientBuilder { fn add_redirect(&mut self, from: Uri, to: Uri) -> &mut Self; fn add_redirects(&mut self, redirects: Vec) -> &mut Self; fn remove_redirect(&mut self, from: &Uri) -> &mut Self; - fn add_resolver(&mut self, resolver: UriResolverLike) -> &mut Self; - fn add_resolvers(&mut self, resolver: Vec) -> &mut Self; + fn add_resolver(&mut self, resolver: Arc) -> &mut Self; + fn add_resolvers(&mut self, resolver: Vec>) -> &mut Self; } pub trait ClientConfigHandler { diff --git a/packages/client/src/client.rs b/packages/client/src/client.rs index 67c5a09ec9..d773a53431 100644 --- a/packages/client/src/client.rs +++ b/packages/client/src/client.rs @@ -9,10 +9,10 @@ use polywrap_core::{ resolvers::uri_resolution_context::UriResolutionContext, resolvers::{ uri_resolution_context::{UriPackageOrWrapper, UriResolutionStep}, - uri_resolver::{UriResolver, UriResolverHandler}, helpers::get_env_from_resolution_path, + uri_resolver::UriResolver, helpers::get_env_from_resolution_path, }, uri::Uri, - wrapper::Wrapper, wrap_loader::WrapLoader, wrap_invoker::WrapInvoker, + wrapper::Wrapper, wrap_loader::WrapLoader, wrap_invoker::WrapInvoker, uri_resolver_handler::UriResolverHandler, }; use polywrap_msgpack::decode; use serde::de::DeserializeOwned; diff --git a/packages/core/src/resolvers/mod.rs b/packages/core/src/resolvers/mod.rs index e572df8845..281e32f26f 100644 --- a/packages/core/src/resolvers/mod.rs +++ b/packages/core/src/resolvers/mod.rs @@ -1,14 +1,4 @@ -pub mod uri_resolver_aggregator_base; -pub mod uri_resolver_like; pub mod uri_resolver; pub mod uri_resolution_context; -pub mod static_resolver; -pub mod uri_resolver_aggregator; -pub mod wrapper_resolver; -pub mod resolver_with_history; pub mod helpers; pub mod get_uri_resolution_path; -pub mod package_resolver; -pub mod redirect_resolver; -pub mod recursive_resolver; -pub mod with_loop_guard_resolver; \ No newline at end of file diff --git a/packages/core/src/resolvers/package_resolver.rs b/packages/core/src/resolvers/package_resolver.rs deleted file mode 100644 index 6214f960fa..0000000000 --- a/packages/core/src/resolvers/package_resolver.rs +++ /dev/null @@ -1,33 +0,0 @@ -use core::fmt; -use std::sync::{Arc}; - -use crate::{uri::Uri, package::WrapPackage, invoker::Invoker}; - -use super::{resolver_with_history::ResolverWithHistory, uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}}; - -pub struct PackageResolver { - pub uri: Uri, - pub package: Arc -} - -impl PackageResolver {} - -impl ResolverWithHistory for PackageResolver { - fn get_step_description(&self, _: &crate::uri::Uri) -> String { - format!("Package ({})", self.uri) - } - - fn _try_resolve_uri(&self, uri: &Uri, _: Arc, _: &mut UriResolutionContext) -> Result { - if uri.to_string() != self.uri.to_string() { - Ok(UriPackageOrWrapper::Uri(uri.clone())) - } else { - Ok(UriPackageOrWrapper::Package(uri.clone(), self.package.clone())) - } - } -} - -impl fmt::Debug for PackageResolver { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "PackageResolver: {}", self.uri) - } -} \ No newline at end of file diff --git a/packages/core/src/resolvers/redirect_resolver.rs b/packages/core/src/resolvers/redirect_resolver.rs deleted file mode 100644 index 828d7da178..0000000000 --- a/packages/core/src/resolvers/redirect_resolver.rs +++ /dev/null @@ -1,44 +0,0 @@ -use core::fmt; -use std::sync::Arc; -use crate::{uri::Uri, invoker::Invoker}; - -use super::{ - resolver_with_history::ResolverWithHistory, - uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, -}; - -pub struct RedirectResolver { - pub from: Uri, - pub to: Uri, -} - -impl RedirectResolver {} - -impl ResolverWithHistory for RedirectResolver { - fn get_step_description(&self, _: &crate::uri::Uri) -> String { - format!( - "Redirect ({} - {})", - self.from, - self.to - ) - } - - fn _try_resolve_uri( - &self, - uri: &Uri, - _: Arc, - _: &mut UriResolutionContext, - ) -> Result { - if uri.to_string() != self.from.to_string() { - Ok(UriPackageOrWrapper::Uri(uri.clone())) - } else { - Ok(UriPackageOrWrapper::Uri(self.to.clone())) - } - } -} - -impl fmt::Debug for RedirectResolver { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "RedirectResolver: {} - {}", self.from, self.to) - } -} \ No newline at end of file diff --git a/packages/core/src/resolvers/resolver_with_history.rs b/packages/core/src/resolvers/resolver_with_history.rs deleted file mode 100644 index 0af63091a6..0000000000 --- a/packages/core/src/resolvers/resolver_with_history.rs +++ /dev/null @@ -1,33 +0,0 @@ -use std::{fmt::Debug, sync::Arc}; - -use crate::{ - error::Error, - uri::Uri, - resolvers::uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext, UriResolutionStep}, - resolvers::uri_resolver::UriResolver, invoker::Invoker -}; - -pub trait ResolverWithHistory: Send + Sync { - fn get_step_description(&self, uri: &Uri) -> String; - fn _try_resolve_uri(&self, uri: &Uri, invoker: Arc, resolution_ctx: &mut UriResolutionContext) -> Result; -} - -impl UriResolver for T { - fn try_resolve_uri(&self, uri: &Uri, invoker: Arc, resolution_ctx: &mut UriResolutionContext) -> Result { - let result = self._try_resolve_uri(uri, invoker, resolution_ctx); - - let resolution_step = UriResolutionStep { - source_uri: uri.clone(), - description: Some(self.get_step_description(uri)), - sub_history: None, - result: match &result { - Ok(r) => Ok(r.clone()), - Err(e) => Err(Error::ResolutionError(e.to_string())) - } - }; - - resolution_ctx.track_step(resolution_step); - - result - } -} diff --git a/packages/core/src/resolvers/uri_resolver.rs b/packages/core/src/resolvers/uri_resolver.rs index 27d22a0c5c..ea94a6eb7a 100644 --- a/packages/core/src/resolvers/uri_resolver.rs +++ b/packages/core/src/resolvers/uri_resolver.rs @@ -4,12 +4,7 @@ use std::sync::Arc; use crate::error::Error; use crate::invoker::Invoker; use crate::uri::Uri; -use super::package_resolver::PackageResolver; -use super::redirect_resolver::RedirectResolver; use super::uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}; -use super::uri_resolver_aggregator::UriResolverAggregator; -use super::uri_resolver_like::UriResolverLike; -use super::wrapper_resolver::WrapperResolver; pub trait UriResolver: Send + Sync + Debug { fn try_resolve_uri( @@ -19,39 +14,3 @@ pub trait UriResolver: Send + Sync + Debug { resolution_context: &mut UriResolutionContext, ) -> Result; } - -impl From for Arc { - fn from(resolver_like: UriResolverLike) -> Self { - match resolver_like { - UriResolverLike::ResolverLike(arr) => { - let resolvers = arr.into_iter().map(|r| { - let resolver: Arc = r.into(); - resolver - }).collect(); - - Arc::new(UriResolverAggregator::new( - resolvers - )) - }, - UriResolverLike::Resolver(resolver) => resolver, - UriResolverLike::Redirect(redirect) => { - Arc::new(RedirectResolver { - from: redirect.from, - to: redirect.to - }) - }, - UriResolverLike::Package(uri, package) => { - Arc::new(PackageResolver { - uri, - package, - }) - }, - UriResolverLike::Wrapper(uri, wrapper) => { - Arc::new(WrapperResolver { - uri, - wrapper, - }) - }, - } - } -} diff --git a/packages/core/src/resolvers/uri_resolver_like.rs b/packages/core/src/resolvers/uri_resolver_like.rs deleted file mode 100644 index df44874d18..0000000000 --- a/packages/core/src/resolvers/uri_resolver_like.rs +++ /dev/null @@ -1,14 +0,0 @@ -use std::sync::{Arc}; - -use crate::{client::UriRedirect, wrapper::Wrapper, package::WrapPackage, uri::Uri}; - -use super::{uri_resolver::UriResolver}; - -#[derive(Clone)] -pub enum UriResolverLike { - Resolver(Arc), - Redirect(UriRedirect), - Package(Uri, Arc), - Wrapper(Uri, Arc), - ResolverLike(Vec), -} \ No newline at end of file diff --git a/packages/core/src/resolvers/wrapper_resolver.rs b/packages/core/src/resolvers/wrapper_resolver.rs deleted file mode 100644 index 2c6d5acc6d..0000000000 --- a/packages/core/src/resolvers/wrapper_resolver.rs +++ /dev/null @@ -1,44 +0,0 @@ -use core::fmt; -use std::sync::{Arc}; - -use crate::{uri::Uri, wrapper::Wrapper, invoker::Invoker}; - -use super::{ - resolver_with_history::ResolverWithHistory, - uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, -}; - -pub struct WrapperResolver { - pub uri: Uri, - pub wrapper: Arc, -} - -impl WrapperResolver {} - -impl ResolverWithHistory for WrapperResolver { - fn get_step_description(&self, _: &crate::uri::Uri) -> String { - format!("Wrapper ({})", self.uri) - } - - fn _try_resolve_uri( - &self, - uri: &Uri, - _: Arc, - _: &mut UriResolutionContext, - ) -> Result { - if uri.to_string() != self.uri.to_string() { - Ok(UriPackageOrWrapper::Uri(uri.clone())) - } else { - Ok(UriPackageOrWrapper::Wrapper( - uri.clone(), - self.wrapper.clone(), - )) - } - } -} - -impl fmt::Debug for WrapperResolver { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "WrapperResolver: {}", self.uri) - } -} \ No newline at end of file diff --git a/packages/resolvers/src/extendable_uri_resolver.rs b/packages/resolvers/src/extendable_uri_resolver.rs index 9bec8704a2..bfbc709b13 100644 --- a/packages/resolvers/src/extendable_uri_resolver.rs +++ b/packages/resolvers/src/extendable_uri_resolver.rs @@ -6,14 +6,13 @@ use polywrap_core::{ UriResolutionContext, UriPackageOrWrapper }, - uri_resolver_aggregator_base::UriResolverAggregatorBase, uri_resolver::UriResolver }, uri::Uri, error::Error, invoker::Invoker }; -use crate::uri_resolver_wrapper::UriResolverWrapper; +use crate::{uri_resolver_wrapper::UriResolverWrapper, uri_resolver_aggregator_base::UriResolverAggregatorBase}; pub struct ExtendableUriResolver { name: Option diff --git a/packages/resolvers/src/lib.rs b/packages/resolvers/src/lib.rs index 8a0822457d..5686447bf0 100644 --- a/packages/resolvers/src/lib.rs +++ b/packages/resolvers/src/lib.rs @@ -1,4 +1,12 @@ pub mod uri_resolver_wrapper; pub mod extendable_uri_resolver; pub mod simple_file_resolver; -pub mod base_resolver; \ No newline at end of file +pub mod base_resolver; +pub mod redirect_resolver; +pub mod wrapper_resolver; +pub mod package_resolver; +pub mod static_resolver; +pub mod recursive_resolver; +pub mod uri_resolver_aggregator; +pub mod uri_resolver_aggregator_base; +pub mod with_loop_guard_resolver; \ No newline at end of file diff --git a/packages/resolvers/src/package_resolver.rs b/packages/resolvers/src/package_resolver.rs new file mode 100644 index 0000000000..bd572dc080 --- /dev/null +++ b/packages/resolvers/src/package_resolver.rs @@ -0,0 +1,42 @@ +use core::fmt; +use std::sync::{Arc}; + +use polywrap_core::{uri::Uri, package::WrapPackage, invoker::Invoker, resolvers::{uri_resolution_context::{UriResolutionContext, UriPackageOrWrapper, UriResolutionStep}, uri_resolver::UriResolver}, error::Error}; + +pub struct PackageResolver { + pub uri: Uri, + pub package: Arc +} + +impl PackageResolver { +} + +impl UriResolver for PackageResolver { + fn try_resolve_uri(&self, uri: &Uri, _: Arc, resolution_context: &mut UriResolutionContext) -> Result { + let result: Result = { + if uri.to_string() != self.uri.to_string() { + Ok(UriPackageOrWrapper::Uri(uri.clone())) + } else { + Ok(UriPackageOrWrapper::Package(uri.clone(), self.package.clone())) + } + }; + + resolution_context.track_step(UriResolutionStep { + source_uri: uri.clone(), + description: Some(format!("Package ({})", self.uri)), + result: match &result { + Ok(r) => Ok(r.clone()), + Err(e) => Err(Error::ResolutionError(e.to_string())) + }, + sub_history: None, + }); + + result + } +} + +impl fmt::Debug for PackageResolver { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "PackageResolver: {}", self.uri) + } +} diff --git a/packages/core/src/resolvers/recursive_resolver.rs b/packages/resolvers/src/recursive_resolver.rs similarity index 78% rename from packages/core/src/resolvers/recursive_resolver.rs rename to packages/resolvers/src/recursive_resolver.rs index 8f9e077a78..eaf797c858 100644 --- a/packages/core/src/resolvers/recursive_resolver.rs +++ b/packages/resolvers/src/recursive_resolver.rs @@ -1,30 +1,21 @@ use core::fmt; use std::sync::Arc; -use crate::{ +use polywrap_core::{ error::Error, resolvers::uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, resolvers::uri_resolver::UriResolver, uri::Uri, invoker::Invoker, }; -use super::{uri_resolver_like::UriResolverLike, uri_resolver_aggregator::UriResolverAggregator}; +use crate::uri_resolver_aggregator::UriResolverAggregator; pub struct RecursiveResolver { resolver: Arc, } -impl From> for RecursiveResolver { - fn from(resolver_likes: Vec) -> Self { - let resolvers = resolver_likes - .into_iter() - .map(|resolver_like| { - let resolver: Arc = resolver_like.into(); - - resolver - }) - .collect(); - +impl From>> for RecursiveResolver { + fn from(resolvers: Vec>) -> Self { RecursiveResolver::new( Arc::new( UriResolverAggregator::new( @@ -35,9 +26,8 @@ impl From> for RecursiveResolver { } } -impl From for RecursiveResolver { - fn from(resolver_like: UriResolverLike) -> Self { - let resolver: Arc = resolver_like.into(); +impl From> for RecursiveResolver { + fn from(resolver: Arc) -> Self { RecursiveResolver::new(resolver) } } diff --git a/packages/resolvers/src/redirect_resolver.rs b/packages/resolvers/src/redirect_resolver.rs new file mode 100644 index 0000000000..9a649a8f39 --- /dev/null +++ b/packages/resolvers/src/redirect_resolver.rs @@ -0,0 +1,55 @@ +use core::fmt; +use std::sync::Arc; +use polywrap_core::resolvers::uri_resolution_context::UriResolutionStep; +use polywrap_core::resolvers::uri_resolver::UriResolver; +use polywrap_core::{error::Error, uri::Uri, invoker::Invoker}; + +use polywrap_core::resolvers::{ + uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, +}; + +pub struct RedirectResolver { + pub from: Uri, + pub to: Uri, +} + +impl RedirectResolver {} + +impl UriResolver for RedirectResolver { + fn try_resolve_uri( + &self, + uri: &Uri, + _: Arc, + resolution_context: &mut UriResolutionContext, + ) -> Result { + let result: Result = { + if uri.to_string() != self.from.to_string() { + Ok(UriPackageOrWrapper::Uri(uri.clone())) + } else { + Ok(UriPackageOrWrapper::Uri(self.to.clone())) + } + }; + + resolution_context.track_step(UriResolutionStep { + source_uri: uri.clone(), + description: Some( format!( + "Redirect ({} - {})", + self.from, + self.to + )), + result: match &result { + Ok(r) => Ok(r.clone()), + Err(e) => Err(Error::ResolutionError(e.to_string())) + }, + sub_history: None, + }); + + result + } +} + +impl fmt::Debug for RedirectResolver { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "RedirectResolver: {} - {}", self.from, self.to) + } +} diff --git a/packages/core/src/resolvers/static_resolver.rs b/packages/resolvers/src/static_resolver.rs similarity index 98% rename from packages/core/src/resolvers/static_resolver.rs rename to packages/resolvers/src/static_resolver.rs index 4d78187381..22bda3b708 100644 --- a/packages/core/src/resolvers/static_resolver.rs +++ b/packages/resolvers/src/static_resolver.rs @@ -1,7 +1,7 @@ use core::fmt; use std::{collections::HashMap, sync::{Arc}}; -use crate::{ - client::{UriRedirect}, +use polywrap_core::{ + client::UriRedirect, error::Error, uri::Uri, resolvers::uri_resolution_context::{ @@ -105,4 +105,4 @@ impl fmt::Debug for StaticResolver { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "StaticResolver") } -} \ No newline at end of file +} diff --git a/packages/core/src/resolvers/uri_resolver_aggregator.rs b/packages/resolvers/src/uri_resolver_aggregator.rs similarity index 78% rename from packages/core/src/resolvers/uri_resolver_aggregator.rs rename to packages/resolvers/src/uri_resolver_aggregator.rs index 7af5e2e1d3..870b90eb81 100644 --- a/packages/core/src/resolvers/uri_resolver_aggregator.rs +++ b/packages/resolvers/src/uri_resolver_aggregator.rs @@ -1,14 +1,14 @@ use core::fmt; -use std::{sync::Arc}; -use crate::{error::Error, uri::Uri, invoker::Invoker}; +use std::sync::Arc; +use polywrap_core::{error::Error, uri::Uri, invoker::Invoker}; -use super::{ +use polywrap_core::resolvers::{ uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, uri_resolver::UriResolver, - uri_resolver_aggregator_base::UriResolverAggregatorBase, - uri_resolver_like::UriResolverLike, }; +use crate::uri_resolver_aggregator_base::UriResolverAggregatorBase; + pub struct UriResolverAggregator { name: Option, resolvers: Vec>, @@ -28,21 +28,6 @@ impl UriResolverAggregator { } } -impl From> for UriResolverAggregator { - fn from(resolver_likes: Vec) -> Self { - let resolvers = resolver_likes - .into_iter() - .map(|resolver_like| { - let resolver: Arc = resolver_like.into(); - - resolver - }) - .collect(); - - UriResolverAggregator::new(resolvers) - } -} - impl UriResolver for UriResolverAggregator { fn try_resolve_uri( &self, @@ -93,4 +78,10 @@ impl fmt::Debug for UriResolverAggregator { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "UriResolverAggregator\nResolvers: {:?}", self.resolvers) } -} \ No newline at end of file +} + +impl From>> for UriResolverAggregator { + fn from(resolvers: Vec>) -> Self { + UriResolverAggregator::new(resolvers) + } +} diff --git a/packages/core/src/resolvers/uri_resolver_aggregator_base.rs b/packages/resolvers/src/uri_resolver_aggregator_base.rs similarity index 88% rename from packages/core/src/resolvers/uri_resolver_aggregator_base.rs rename to packages/resolvers/src/uri_resolver_aggregator_base.rs index bac3080cef..709a557137 100644 --- a/packages/core/src/resolvers/uri_resolver_aggregator_base.rs +++ b/packages/resolvers/src/uri_resolver_aggregator_base.rs @@ -1,8 +1,10 @@ use std::sync::Arc; -use crate::{uri::Uri, invoker::Invoker}; +use polywrap_core::error::Error; -use super::{ +use polywrap_core::{uri::Uri, invoker::Invoker}; + +use polywrap_core::resolvers::{ uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext, UriResolutionStep}, uri_resolver::UriResolver, }; @@ -14,11 +16,11 @@ pub trait UriResolverAggregatorBase: UriResolver + core::fmt::Debug { uri: &Uri, client: &dyn Invoker, resolution_context: &mut UriResolutionContext, - ) -> Result>, crate::error::Error>; + ) -> Result>, Error>; fn get_step_description( &self, uri: &Uri, - result: &Result, + result: &Result, ) -> String; fn try_resolve_uri_with_resolvers( &self, @@ -26,7 +28,7 @@ pub trait UriResolverAggregatorBase: UriResolver + core::fmt::Debug { invoker: Arc, resolvers: Vec>, resolution_context: &mut UriResolutionContext, - ) -> Result { + ) -> Result { let sub_context = resolution_context.create_sub_history_context(); for resolver in resolvers.into_iter() { let result = resolver diff --git a/packages/core/src/resolvers/with_loop_guard_resolver.rs b/packages/resolvers/src/with_loop_guard_resolver.rs similarity index 50% rename from packages/core/src/resolvers/with_loop_guard_resolver.rs rename to packages/resolvers/src/with_loop_guard_resolver.rs index 71f64a6b67..07721b6b56 100644 --- a/packages/core/src/resolvers/with_loop_guard_resolver.rs +++ b/packages/resolvers/src/with_loop_guard_resolver.rs @@ -1,24 +1,17 @@ use core::fmt; -use std::{sync::Arc}; +use std::sync::Arc; -use crate::{error::Error, invoker::Invoker}; - -use super::{uri_resolver_like::UriResolverLike, uri_resolver::UriResolver, uri_resolution_context::{UriResolutionContext, UriPackageOrWrapper}}; +use polywrap_core::{ + error::Error, invoker::Invoker, uri::Uri, + resolvers::{uri_resolver::UriResolver, uri_resolution_context::{UriResolutionContext, UriPackageOrWrapper}} +}; pub struct ResolverWithLoopGuard { - pub resolver: Arc, -} - -impl From for ResolverWithLoopGuard { - fn from(resolver_like: UriResolverLike) -> Self { - let resolver: Arc = resolver_like.into(); - - Self { resolver } - } + pub resolver: Arc, } impl UriResolver for ResolverWithLoopGuard { - fn try_resolve_uri(&self, uri: &crate::uri::Uri, invoker: Arc, resolution_context: &mut UriResolutionContext) -> Result { + fn try_resolve_uri(&self, uri: &Uri, invoker: Arc, resolution_context: &mut UriResolutionContext) -> Result { if resolution_context.is_resolving(uri) { //TODO handle this error Err(Error::ResolverError("Infinite Loop".to_string())) diff --git a/packages/resolvers/src/wrapper_resolver.rs b/packages/resolvers/src/wrapper_resolver.rs new file mode 100644 index 0000000000..81b69d340b --- /dev/null +++ b/packages/resolvers/src/wrapper_resolver.rs @@ -0,0 +1,55 @@ +use core::fmt; +use std::sync::Arc; + +use polywrap_core::resolvers::uri_resolution_context::UriResolutionStep; +use polywrap_core::resolvers::uri_resolver::UriResolver; +use polywrap_core::{uri::Uri, error::Error, wrapper::Wrapper, invoker::Invoker}; + +use polywrap_core::resolvers::{ + uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, +}; + +pub struct WrapperResolver { + pub uri: Uri, + pub wrapper: Arc, +} + +impl WrapperResolver {} + +impl UriResolver for WrapperResolver { + fn try_resolve_uri( + &self, + uri: &Uri, + _: Arc, + resolution_context: &mut UriResolutionContext, + ) -> Result { + let result: Result = { + if uri.to_string() != self.uri.to_string() { + Ok(UriPackageOrWrapper::Uri(uri.clone())) + } else { + Ok(UriPackageOrWrapper::Wrapper( + uri.clone(), + self.wrapper.clone(), + )) + } + }; + + resolution_context.track_step(UriResolutionStep { + source_uri: uri.clone(), + description: Some(format!("Wrapper ({})", uri)), + result: match &result { + Ok(r) => Ok(r.clone()), + Err(e) => Err(Error::ResolutionError(e.to_string())) + }, + sub_history: None, + }); + + result + } +} + +impl fmt::Debug for WrapperResolver { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "WrapperResolver: {}", self.uri) + } +} From 8438efd9110b8f673739c6b16488a871f9851bbe Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Thu, 18 May 2023 16:05:35 +0200 Subject: [PATCH 5/8] renamed resolvers dir to resolution in core crate; refactor: implemented resolver_vec macro --- packages/builder/src/client_config_builder.rs | 2 +- packages/builder/src/helpers.rs | 16 ++++----- packages/builder/src/types.rs | 2 +- packages/client/src/client.rs | 10 +++--- packages/client/src/subinvoker.rs | 2 +- packages/client/tests/test_env_with_invoke.rs | 31 +++++++++-------- .../client/tests/test_env_with_subinvoke.rs | 4 +-- .../tests/test_interface_implementation.rs | 2 +- packages/client/tests/test_map_type.rs | 2 +- .../client/tests/test_plugin_invocation.rs | 3 +- packages/client/tests/test_uri_resolvers.rs | 12 +++---- packages/core/src/client.rs | 2 +- packages/core/src/invoker.rs | 2 +- packages/core/src/lib.rs | 2 +- .../get_uri_resolution_path.rs | 0 .../src/{resolvers => resolution}/helpers.rs | 0 .../core/src/{resolvers => resolution}/mod.rs | 0 .../uri_resolution_context.rs | 0 .../{resolvers => resolution}/uri_resolver.rs | 0 packages/core/src/uri.rs | 3 +- packages/core/src/uri_resolver_handler.rs | 2 +- packages/core/src/wrap_invoker.rs | 2 +- packages/core/src/wrap_loader.rs | 2 +- packages/resolution/Cargo.toml | 18 ---------- packages/resolution/src/lib.rs | 14 -------- packages/resolvers/src/base_resolver.rs | 4 +-- .../resolvers/src/extendable_uri_resolver.rs | 2 +- packages/resolvers/src/lib.rs | 3 +- packages/resolvers/src/package_resolver.rs | 2 +- packages/resolvers/src/recursive_resolver.rs | 33 ++++++++++++++----- packages/resolvers/src/redirect_resolver.rs | 6 ++-- packages/resolvers/src/resolver_vec.rs | 6 ++++ .../resolvers/src/simple_file_resolver.rs | 3 +- packages/resolvers/src/static_resolver.rs | 4 +-- .../resolvers/src/uri_resolver_aggregator.rs | 16 ++++++--- .../src/uri_resolver_aggregator_base.rs | 2 +- .../resolvers/src/uri_resolver_wrapper.rs | 4 +-- .../resolvers/src/with_loop_guard_resolver.rs | 2 +- packages/resolvers/src/wrapper_resolver.rs | 6 ++-- packages/wasm/tests/test_runtime.rs | 2 +- 40 files changed, 107 insertions(+), 121 deletions(-) rename packages/core/src/{resolvers => resolution}/get_uri_resolution_path.rs (100%) rename packages/core/src/{resolvers => resolution}/helpers.rs (100%) rename packages/core/src/{resolvers => resolution}/mod.rs (100%) rename packages/core/src/{resolvers => resolution}/uri_resolution_context.rs (100%) rename packages/core/src/{resolvers => resolution}/uri_resolver.rs (100%) delete mode 100644 packages/resolution/Cargo.toml delete mode 100644 packages/resolution/src/lib.rs create mode 100644 packages/resolvers/src/resolver_vec.rs diff --git a/packages/builder/src/client_config_builder.rs b/packages/builder/src/client_config_builder.rs index 1d8597b97f..2a8c751f44 100644 --- a/packages/builder/src/client_config_builder.rs +++ b/packages/builder/src/client_config_builder.rs @@ -3,7 +3,7 @@ use std::{collections::HashMap, sync::{Arc}}; use polywrap_core::{ client::{ClientConfig, UriRedirect}, env::{Env,Envs}, - resolvers::uri_resolver::UriResolver, + resolution::uri_resolver::UriResolver, uri::Uri, wrapper::Wrapper, package::WrapPackage }; diff --git a/packages/builder/src/helpers.rs b/packages/builder/src/helpers.rs index 35ffe0fdb5..e4af9c5097 100644 --- a/packages/builder/src/helpers.rs +++ b/packages/builder/src/helpers.rs @@ -2,11 +2,11 @@ use std::sync::Arc; use polywrap_core::{ client::ClientConfig, - resolvers::{ + resolution::{ uri_resolver::UriResolver, }, }; -use polywrap_resolvers::{extendable_uri_resolver::ExtendableUriResolver, static_resolver::{StaticResolverLike, StaticResolver}, recursive_resolver::RecursiveResolver}; +use polywrap_resolvers::{extendable_uri_resolver::ExtendableUriResolver, uri_resolver_aggregator::UriResolverAggregator, static_resolver::{StaticResolverLike, StaticResolver}, recursive_resolver::RecursiveResolver, resolver_vec}; use serde_json::Value; use crate::types::BuilderConfig; @@ -44,17 +44,13 @@ pub fn build_resolver(builder: BuilderConfig) -> ClientConfig { static_resolvers.push(StaticResolverLike::Redirect(r)); } } - let static_resolver = StaticResolver::from(static_resolvers); - let extendable_resolver = ExtendableUriResolver::new(None); - - let resolvers: Vec> = vec![ - Arc::new(static_resolver), - Arc::new(extendable_resolver), - ]; ClientConfig { envs: builder.envs.clone(), interfaces: builder.interfaces.clone(), - resolver: Arc::new(RecursiveResolver::from(resolvers)) as Arc, + resolver: Arc::new(RecursiveResolver::from(resolver_vec![ + StaticResolver::from(static_resolvers), + ExtendableUriResolver::new(None), + ])), } } diff --git a/packages/builder/src/types.rs b/packages/builder/src/types.rs index 2be7505a24..60fbd10bcf 100644 --- a/packages/builder/src/types.rs +++ b/packages/builder/src/types.rs @@ -4,7 +4,7 @@ use polywrap_core::{ interface_implementation::InterfaceImplementations, env::{Envs,Env}, uri::Uri, - client::{UriRedirect, ClientConfig}, package::WrapPackage, wrapper::Wrapper, resolvers::uri_resolver::UriResolver + client::{UriRedirect, ClientConfig}, package::WrapPackage, wrapper::Wrapper, resolution::uri_resolver::UriResolver }; #[derive(Clone)] diff --git a/packages/client/src/client.rs b/packages/client/src/client.rs index d773a53431..9dd6d97af7 100644 --- a/packages/client/src/client.rs +++ b/packages/client/src/client.rs @@ -6,8 +6,8 @@ use polywrap_core::{ error::Error, interface_implementation::InterfaceImplementations, invoker::Invoker, - resolvers::uri_resolution_context::UriResolutionContext, - resolvers::{ + resolution::uri_resolution_context::UriResolutionContext, + resolution::{ uri_resolution_context::{UriPackageOrWrapper, UriResolutionStep}, uri_resolver::UriResolver, helpers::get_env_from_resolution_path, }, @@ -138,7 +138,7 @@ impl Invoker for PolywrapClient { } fn get_implementations(&self, uri: &Uri) -> Result, Error> { - polywrap_core::resolvers::helpers::get_implementations(uri, self.get_interfaces(), self) + polywrap_core::resolution::helpers::get_implementations(uri, self.get_interfaces(), self) } fn get_interfaces(&self) -> Option { @@ -264,12 +264,12 @@ mod client_tests { client::ClientConfig, error::Error, invoker::Invoker, - resolvers::{ + resolution::{ uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, uri_resolver::{UriResolver, UriResolverHandler}, }, uri::Uri, - wrapper::{GetFileOptions, Wrapper}, wrap_loader::WrapLoader, + wrapper::{GetFileOptions, Wrapper}, wrap_loader::WrapLoader, uri_resolver_handler::UriResolverHandler, }; use std::sync::Arc; diff --git a/packages/client/src/subinvoker.rs b/packages/client/src/subinvoker.rs index 75369a535b..f61fa5f45a 100644 --- a/packages/client/src/subinvoker.rs +++ b/packages/client/src/subinvoker.rs @@ -1,7 +1,7 @@ use std::sync::{Mutex, Arc}; use polywrap_core::{ - resolvers::uri_resolution_context::UriResolutionContext, + resolution::uri_resolution_context::UriResolutionContext, invoker::Invoker, env::Env, error::Error, uri::Uri, interface_implementation::InterfaceImplementations }; diff --git a/packages/client/tests/test_env_with_invoke.rs b/packages/client/tests/test_env_with_invoke.rs index bf30a62226..3332d76f8b 100644 --- a/packages/client/tests/test_env_with_invoke.rs +++ b/packages/client/tests/test_env_with_invoke.rs @@ -4,12 +4,13 @@ use polywrap_client::msgpack::msgpack; use polywrap_core::client::ClientConfig; use polywrap_core::file_reader::SimpleFileReader; -use polywrap_core::resolvers::recursive_resolver::RecursiveResolver; -use polywrap_core::resolvers::static_resolver::StaticResolver; -use polywrap_core::resolvers::uri_resolution_context::UriPackageOrWrapper; -use polywrap_core::resolvers::uri_resolver_like::UriResolverLike; +use polywrap_core::resolution::uri_resolution_context::UriPackageOrWrapper; +use polywrap_core::resolution::uri_resolver::UriResolver; use polywrap_resolvers::base_resolver::BaseResolver; +use polywrap_resolvers::recursive_resolver::RecursiveResolver; +use polywrap_resolvers::resolver_vec; use polywrap_resolvers::simple_file_resolver::FilesystemResolver; +use polywrap_resolvers::static_resolver::StaticResolver; use polywrap_tests_utils::helpers::get_tests_path; use serde::{Deserialize, Serialize}; use std::collections::HashMap; @@ -278,14 +279,13 @@ fn env_can_be_registered_for_any_uri_in_resolution_path() { let file_reader = SimpleFileReader::new(); let fs_resolver = FilesystemResolver::new(Arc::new(file_reader)); - // Use the RecursiveResolver because it tracks resolution path (unlike BaseResolver) - let base_resolver = RecursiveResolver::from(vec![ - UriResolverLike::Resolver(Arc::new(StaticResolver::new(resolvers))), - UriResolverLike::Resolver(Arc::new(fs_resolver)), - ]); let config = ClientConfig { envs: Some(envs), - resolver: Arc::new(base_resolver), + // Use the RecursiveResolver because it tracks resolution path (unlike BaseResolver) + resolver: Arc::new(RecursiveResolver::new(resolver_vec![ + StaticResolver::new(resolvers), + fs_resolver, + ])), interfaces: None, }; @@ -322,14 +322,13 @@ fn env_can_be_registered_for_any_uri_in_resolution_path() { let file_reader = SimpleFileReader::new(); let fs_resolver = FilesystemResolver::new(Arc::new(file_reader)); - // Use the RecursiveResolver because it tracks resolution path (unlike BaseResolver) - let base_resolver = RecursiveResolver::from(vec![ - UriResolverLike::Resolver(Arc::new(StaticResolver::new(resolvers))), - UriResolverLike::Resolver(Arc::new(fs_resolver)), - ]); let config = ClientConfig { envs: Some(envs), - resolver: Arc::new(base_resolver), + // Use the RecursiveResolver because it tracks resolution path (unlike BaseResolver) + resolver: Arc::new(RecursiveResolver::from(resolver_vec![ + StaticResolver::new(resolvers), + fs_resolver, + ])), interfaces: None, }; diff --git a/packages/client/tests/test_env_with_subinvoke.rs b/packages/client/tests/test_env_with_subinvoke.rs index 5bf65b5ab9..dfac400629 100644 --- a/packages/client/tests/test_env_with_subinvoke.rs +++ b/packages/client/tests/test_env_with_subinvoke.rs @@ -4,10 +4,10 @@ use polywrap_client::msgpack::msgpack; use polywrap_core::client::ClientConfig; use polywrap_core::file_reader::SimpleFileReader; -use polywrap_core::resolvers::static_resolver::StaticResolver; -use polywrap_core::resolvers::uri_resolution_context::UriPackageOrWrapper; +use polywrap_core::resolution::uri_resolution_context::UriPackageOrWrapper; use polywrap_resolvers::base_resolver::BaseResolver; use polywrap_resolvers::simple_file_resolver::FilesystemResolver; +use polywrap_resolvers::static_resolver::StaticResolver; use polywrap_tests_utils::helpers::get_tests_path; use serde::{Deserialize, Serialize}; use std::collections::HashMap; diff --git a/packages/client/tests/test_interface_implementation.rs b/packages/client/tests/test_interface_implementation.rs index bfb99e6406..7250448d35 100644 --- a/packages/client/tests/test_interface_implementation.rs +++ b/packages/client/tests/test_interface_implementation.rs @@ -4,7 +4,7 @@ use polywrap_client::msgpack::msgpack; use polywrap_core::client::ClientConfig; use polywrap_core::file_reader::SimpleFileReader; -use polywrap_core::resolvers::static_resolver::StaticResolver; +use polywrap_core::resolution::static_resolver::StaticResolver; use polywrap_resolvers::base_resolver::BaseResolver; use polywrap_resolvers::simple_file_resolver::FilesystemResolver; use polywrap_tests_utils::helpers::get_tests_path; diff --git a/packages/client/tests/test_map_type.rs b/packages/client/tests/test_map_type.rs index e047a6c491..e2cad2b4db 100644 --- a/packages/client/tests/test_map_type.rs +++ b/packages/client/tests/test_map_type.rs @@ -7,9 +7,9 @@ use polywrap_client::core::uri::Uri; use polywrap_client::plugin::Map; use polywrap_core::client::ClientConfig; use polywrap_core::file_reader::SimpleFileReader; -use polywrap_core::resolvers::static_resolver::StaticResolver; use polywrap_resolvers::base_resolver::BaseResolver; use polywrap_resolvers::simple_file_resolver::FilesystemResolver; +use polywrap_resolvers::static_resolver::StaticResolver; use polywrap_tests_utils::helpers::get_tests_path; use serde::{Deserialize, Serialize}; diff --git a/packages/client/tests/test_plugin_invocation.rs b/packages/client/tests/test_plugin_invocation.rs index 616c7dee7c..2796da1bb7 100644 --- a/packages/client/tests/test_plugin_invocation.rs +++ b/packages/client/tests/test_plugin_invocation.rs @@ -1,8 +1,9 @@ use JSON::{json, from_value, Value}; use polywrap_client::client::PolywrapClient; -use polywrap_core::{invoker::{Invoker}, env::Env, resolvers::static_resolver::{StaticResolverLike, StaticResolver}, package::WrapPackage, uri::Uri, client::ClientConfig}; +use polywrap_core::{invoker::{Invoker}, env::Env, package::WrapPackage, uri::Uri, client::ClientConfig}; use polywrap_msgpack::msgpack; +use polywrap_resolvers::static_resolver::{StaticResolver, StaticResolverLike}; use wrap_manifest_schemas::versions::{WrapManifest, WrapManifestAbi}; use std::{sync::Arc, collections::HashMap}; use serde_json as JSON; diff --git a/packages/client/tests/test_uri_resolvers.rs b/packages/client/tests/test_uri_resolvers.rs index 4055eefadc..459c04c0df 100644 --- a/packages/client/tests/test_uri_resolvers.rs +++ b/packages/client/tests/test_uri_resolvers.rs @@ -6,19 +6,15 @@ use std::sync::Arc; use polywrap_client::client::PolywrapClient; use polywrap_client::resolvers::uri_resolver_wrapper::UriResolverWrapper; -use polywrap_client::core::{ - resolvers::{ - uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, - }, - uri::Uri, -}; use polywrap_core::client::ClientConfig; use polywrap_core::file_reader::SimpleFileReader; use polywrap_core::interface_implementation::InterfaceImplementations; -use polywrap_core::resolvers::static_resolver::StaticResolver; -use polywrap_core::resolvers::uri_resolver::UriResolver; +use polywrap_core::resolution::uri_resolution_context::{UriResolutionContext, UriPackageOrWrapper}; +use polywrap_core::resolution::uri_resolver::UriResolver; +use polywrap_core::uri::Uri; use polywrap_resolvers::base_resolver::BaseResolver; use polywrap_resolvers::simple_file_resolver::FilesystemResolver; +use polywrap_resolvers::static_resolver::StaticResolver; use polywrap_tests_utils::helpers::get_tests_path; use polywrap_wasm::wasm_wrapper::WasmWrapper; diff --git a/packages/core/src/client.rs b/packages/core/src/client.rs index b498ee442c..bf7dd598c5 100644 --- a/packages/core/src/client.rs +++ b/packages/core/src/client.rs @@ -2,7 +2,7 @@ use std::sync::Arc; use crate::uri::Uri; use crate::interface_implementation::InterfaceImplementations; -use crate::resolvers::uri_resolver::UriResolver; +use crate::resolution::uri_resolver::UriResolver; use crate::env::Envs; use crate::invoker::Invoker; use crate::uri_resolver_handler::UriResolverHandler; diff --git a/packages/core/src/invoker.rs b/packages/core/src/invoker.rs index 00707de413..acca959ff0 100644 --- a/packages/core/src/invoker.rs +++ b/packages/core/src/invoker.rs @@ -1,5 +1,5 @@ use crate::{ - error::Error, uri::Uri, resolvers::uri_resolution_context::UriResolutionContext, env::Env, + error::Error, uri::Uri, resolution::uri_resolution_context::UriResolutionContext, env::Env, interface_implementation::InterfaceImplementations, }; pub trait Invoker: Send + Sync { diff --git a/packages/core/src/lib.rs b/packages/core/src/lib.rs index f31a66b937..6e33cf1c76 100644 --- a/packages/core/src/lib.rs +++ b/packages/core/src/lib.rs @@ -11,4 +11,4 @@ pub mod file_reader; pub mod env; pub mod interface_implementation; pub mod uri_resolver_handler; -pub mod resolvers; +pub mod resolution; diff --git a/packages/core/src/resolvers/get_uri_resolution_path.rs b/packages/core/src/resolution/get_uri_resolution_path.rs similarity index 100% rename from packages/core/src/resolvers/get_uri_resolution_path.rs rename to packages/core/src/resolution/get_uri_resolution_path.rs diff --git a/packages/core/src/resolvers/helpers.rs b/packages/core/src/resolution/helpers.rs similarity index 100% rename from packages/core/src/resolvers/helpers.rs rename to packages/core/src/resolution/helpers.rs diff --git a/packages/core/src/resolvers/mod.rs b/packages/core/src/resolution/mod.rs similarity index 100% rename from packages/core/src/resolvers/mod.rs rename to packages/core/src/resolution/mod.rs diff --git a/packages/core/src/resolvers/uri_resolution_context.rs b/packages/core/src/resolution/uri_resolution_context.rs similarity index 100% rename from packages/core/src/resolvers/uri_resolution_context.rs rename to packages/core/src/resolution/uri_resolution_context.rs diff --git a/packages/core/src/resolvers/uri_resolver.rs b/packages/core/src/resolution/uri_resolver.rs similarity index 100% rename from packages/core/src/resolvers/uri_resolver.rs rename to packages/core/src/resolution/uri_resolver.rs diff --git a/packages/core/src/uri.rs b/packages/core/src/uri.rs index 34831ad9ae..8460edb671 100644 --- a/packages/core/src/uri.rs +++ b/packages/core/src/uri.rs @@ -1,7 +1,8 @@ -use crate::error::Error; use serde::Serialize; use regex::Regex; +use crate::error::Error; + #[derive(Clone,Serialize,Debug)] pub struct Uri { pub authority: String, diff --git a/packages/core/src/uri_resolver_handler.rs b/packages/core/src/uri_resolver_handler.rs index 93d2150729..fdba11d377 100644 --- a/packages/core/src/uri_resolver_handler.rs +++ b/packages/core/src/uri_resolver_handler.rs @@ -1,4 +1,4 @@ -use crate::{resolvers::uri_resolution_context::{UriResolutionContext, UriPackageOrWrapper}, error::Error, uri::Uri}; +use crate::{error::Error, uri::Uri, resolution::uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}}; pub trait UriResolverHandler { fn try_resolve_uri( diff --git a/packages/core/src/wrap_invoker.rs b/packages/core/src/wrap_invoker.rs index 22270bc01e..270e956d64 100644 --- a/packages/core/src/wrap_invoker.rs +++ b/packages/core/src/wrap_invoker.rs @@ -1,4 +1,4 @@ -use crate::{resolvers::uri_resolution_context::UriResolutionContext, error::Error, wrapper::Wrapper, uri::Uri, env::Env}; +use crate::{resolution::uri_resolution_context::UriResolutionContext, error::Error, wrapper::Wrapper, uri::Uri, env::Env}; pub trait WrapInvoker: Send + Sync { fn invoke_wrapper_raw( diff --git a/packages/core/src/wrap_loader.rs b/packages/core/src/wrap_loader.rs index 2026d02449..fc6d0bdea9 100644 --- a/packages/core/src/wrap_loader.rs +++ b/packages/core/src/wrap_loader.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use crate::{resolvers::uri_resolution_context::UriResolutionContext, error::Error, wrapper::Wrapper, uri::Uri}; +use crate::{resolution::uri_resolution_context::UriResolutionContext, error::Error, wrapper::Wrapper, uri::Uri}; pub trait WrapLoader: Send + Sync { fn load_wrapper( diff --git a/packages/resolution/Cargo.toml b/packages/resolution/Cargo.toml deleted file mode 100644 index 6a98c90e89..0000000000 --- a/packages/resolution/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "polywrap_resolution" -description = "Core types of Polywrap URI resolution" - -version.workspace = true -edition.workspace = true -rust-version.workspace = true -license.workspace = true - -[dependencies] -polywrap_core.workspace = true -thiserror.workspace = true -regex.workspace = true -wrap_manifest_schemas.workspace = true -polywrap_msgpack.workspace = true -serde.workspace = true -serde_json.workspace = true -jsonschema.workspace = true diff --git a/packages/resolution/src/lib.rs b/packages/resolution/src/lib.rs deleted file mode 100644 index e572df8845..0000000000 --- a/packages/resolution/src/lib.rs +++ /dev/null @@ -1,14 +0,0 @@ -pub mod uri_resolver_aggregator_base; -pub mod uri_resolver_like; -pub mod uri_resolver; -pub mod uri_resolution_context; -pub mod static_resolver; -pub mod uri_resolver_aggregator; -pub mod wrapper_resolver; -pub mod resolver_with_history; -pub mod helpers; -pub mod get_uri_resolution_path; -pub mod package_resolver; -pub mod redirect_resolver; -pub mod recursive_resolver; -pub mod with_loop_guard_resolver; \ No newline at end of file diff --git a/packages/resolvers/src/base_resolver.rs b/packages/resolvers/src/base_resolver.rs index 2efa3e183f..80e2df6c2e 100644 --- a/packages/resolvers/src/base_resolver.rs +++ b/packages/resolvers/src/base_resolver.rs @@ -3,8 +3,8 @@ use std::sync::Arc; use polywrap_core::{ error::Error, uri::Uri, - resolvers::uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, - resolvers::uri_resolver::UriResolver, invoker::Invoker, + resolution::uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, + resolution::uri_resolver::UriResolver, invoker::Invoker, }; pub struct BaseResolver { diff --git a/packages/resolvers/src/extendable_uri_resolver.rs b/packages/resolvers/src/extendable_uri_resolver.rs index bfbc709b13..4172e37101 100644 --- a/packages/resolvers/src/extendable_uri_resolver.rs +++ b/packages/resolvers/src/extendable_uri_resolver.rs @@ -1,7 +1,7 @@ use core::fmt; use std::sync::Arc; use polywrap_core::{ - resolvers::{ + resolution::{ uri_resolution_context::{ UriResolutionContext, UriPackageOrWrapper diff --git a/packages/resolvers/src/lib.rs b/packages/resolvers/src/lib.rs index 5686447bf0..29699dbf1a 100644 --- a/packages/resolvers/src/lib.rs +++ b/packages/resolvers/src/lib.rs @@ -9,4 +9,5 @@ pub mod static_resolver; pub mod recursive_resolver; pub mod uri_resolver_aggregator; pub mod uri_resolver_aggregator_base; -pub mod with_loop_guard_resolver; \ No newline at end of file +pub mod with_loop_guard_resolver; +pub mod resolver_vec; \ No newline at end of file diff --git a/packages/resolvers/src/package_resolver.rs b/packages/resolvers/src/package_resolver.rs index bd572dc080..6bf983b41c 100644 --- a/packages/resolvers/src/package_resolver.rs +++ b/packages/resolvers/src/package_resolver.rs @@ -1,7 +1,7 @@ use core::fmt; use std::sync::{Arc}; -use polywrap_core::{uri::Uri, package::WrapPackage, invoker::Invoker, resolvers::{uri_resolution_context::{UriResolutionContext, UriPackageOrWrapper, UriResolutionStep}, uri_resolver::UriResolver}, error::Error}; +use polywrap_core::{uri::Uri, package::WrapPackage, invoker::Invoker, resolution::{uri_resolution_context::{UriResolutionContext, UriPackageOrWrapper, UriResolutionStep}, uri_resolver::UriResolver}, error::Error}; pub struct PackageResolver { pub uri: Uri, diff --git a/packages/resolvers/src/recursive_resolver.rs b/packages/resolvers/src/recursive_resolver.rs index eaf797c858..9a5c232fbb 100644 --- a/packages/resolvers/src/recursive_resolver.rs +++ b/packages/resolvers/src/recursive_resolver.rs @@ -3,8 +3,8 @@ use std::sync::Arc; use polywrap_core::{ error::Error, - resolvers::uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, - resolvers::uri_resolver::UriResolver, + resolution::uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, + resolution::uri_resolver::UriResolver, uri::Uri, invoker::Invoker, }; @@ -14,14 +14,23 @@ pub struct RecursiveResolver { resolver: Arc, } -impl From>> for RecursiveResolver { - fn from(resolvers: Vec>) -> Self { +// impl From>> for RecursiveResolver { +// fn from(resolvers: Vec>) -> Self { +// RecursiveResolver::new( +// Arc::new( +// UriResolverAggregator::new( +// resolvers.into_iter().map(|resolver| resolver as Arc).collect() +// ) +// ) +// ) +// } +// } + +impl From>> for RecursiveResolver { + fn from(resolvers: Vec>) -> Self { + let aggregator = UriResolverAggregator::new(resolvers); RecursiveResolver::new( - Arc::new( - UriResolverAggregator::new( - resolvers - ) - ) + Arc::new(aggregator) ) } } @@ -32,6 +41,12 @@ impl From> for RecursiveResolver { } } +impl From> for RecursiveResolver { + fn from(resolver: Box) -> Self { + RecursiveResolver::new(Arc::from(resolver)) + } +} + impl RecursiveResolver { pub fn new(resolver: Arc) -> Self { Self { resolver } diff --git a/packages/resolvers/src/redirect_resolver.rs b/packages/resolvers/src/redirect_resolver.rs index 9a649a8f39..5504a1a64a 100644 --- a/packages/resolvers/src/redirect_resolver.rs +++ b/packages/resolvers/src/redirect_resolver.rs @@ -1,10 +1,10 @@ use core::fmt; use std::sync::Arc; -use polywrap_core::resolvers::uri_resolution_context::UriResolutionStep; -use polywrap_core::resolvers::uri_resolver::UriResolver; +use polywrap_core::resolution::uri_resolution_context::UriResolutionStep; +use polywrap_core::resolution::uri_resolver::UriResolver; use polywrap_core::{error::Error, uri::Uri, invoker::Invoker}; -use polywrap_core::resolvers::{ +use polywrap_core::resolution::{ uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, }; diff --git a/packages/resolvers/src/resolver_vec.rs b/packages/resolvers/src/resolver_vec.rs new file mode 100644 index 0000000000..b9335015d1 --- /dev/null +++ b/packages/resolvers/src/resolver_vec.rs @@ -0,0 +1,6 @@ +#[macro_export] +macro_rules! resolver_vec { + ($($resolver:expr),* $(,)?) => { + Box::new(UriResolverAggregator::from(vec![$(Box::from($resolver) as Box),*])) as Box + }; +} diff --git a/packages/resolvers/src/simple_file_resolver.rs b/packages/resolvers/src/simple_file_resolver.rs index 0fb83ce50e..c7d245d65b 100644 --- a/packages/resolvers/src/simple_file_resolver.rs +++ b/packages/resolvers/src/simple_file_resolver.rs @@ -4,8 +4,7 @@ use polywrap_core::{ error::Error, file_reader::FileReader, uri::Uri, - resolvers::uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, - resolvers::uri_resolver::UriResolver, invoker::Invoker, + resolution::{uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, uri_resolver::UriResolver}, invoker::Invoker, }; use polywrap_wasm::{ wasm_package::WasmPackage, diff --git a/packages/resolvers/src/static_resolver.rs b/packages/resolvers/src/static_resolver.rs index 22bda3b708..e784ab1257 100644 --- a/packages/resolvers/src/static_resolver.rs +++ b/packages/resolvers/src/static_resolver.rs @@ -4,10 +4,10 @@ use polywrap_core::{ client::UriRedirect, error::Error, uri::Uri, - resolvers::uri_resolution_context::{ + resolution::uri_resolution_context::{ UriPackageOrWrapper, UriResolutionContext, UriResolutionStep, }, - resolvers::uri_resolver::UriResolver, package::WrapPackage, wrapper::Wrapper, invoker::Invoker, + resolution::uri_resolver::UriResolver, package::WrapPackage, wrapper::Wrapper, invoker::Invoker, }; pub enum StaticResolverLike { diff --git a/packages/resolvers/src/uri_resolver_aggregator.rs b/packages/resolvers/src/uri_resolver_aggregator.rs index 870b90eb81..d3dd2bcff3 100644 --- a/packages/resolvers/src/uri_resolver_aggregator.rs +++ b/packages/resolvers/src/uri_resolver_aggregator.rs @@ -2,7 +2,7 @@ use core::fmt; use std::sync::Arc; use polywrap_core::{error::Error, uri::Uri, invoker::Invoker}; -use polywrap_core::resolvers::{ +use polywrap_core::resolution::{ uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, uri_resolver::UriResolver, }; @@ -15,7 +15,8 @@ pub struct UriResolverAggregator { } impl UriResolverAggregator { - pub fn new(resolvers: Vec>) -> Self { + pub fn new(resolvers: Vec>) -> Self { + let resolvers = resolvers.into_iter().map(Arc::from).collect(); Self { name: None, resolvers, @@ -80,8 +81,13 @@ impl fmt::Debug for UriResolverAggregator { } } -impl From>> for UriResolverAggregator { - fn from(resolvers: Vec>) -> Self { +// impl From>> for UriResolverAggregator { +// fn from(resolvers: Vec>) -> Self { +// UriResolverAggregator::new(resolvers) +// } +// } +impl From>> for UriResolverAggregator { + fn from(resolvers: Vec>) -> Self { UriResolverAggregator::new(resolvers) } -} +} \ No newline at end of file diff --git a/packages/resolvers/src/uri_resolver_aggregator_base.rs b/packages/resolvers/src/uri_resolver_aggregator_base.rs index 709a557137..d367f1f226 100644 --- a/packages/resolvers/src/uri_resolver_aggregator_base.rs +++ b/packages/resolvers/src/uri_resolver_aggregator_base.rs @@ -4,7 +4,7 @@ use polywrap_core::error::Error; use polywrap_core::{uri::Uri, invoker::Invoker}; -use polywrap_core::resolvers::{ +use polywrap_core::resolution::{ uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext, UriResolutionStep}, uri_resolver::UriResolver, }; diff --git a/packages/resolvers/src/uri_resolver_wrapper.rs b/packages/resolvers/src/uri_resolver_wrapper.rs index fd15a7e02f..16ad184988 100644 --- a/packages/resolvers/src/uri_resolver_wrapper.rs +++ b/packages/resolvers/src/uri_resolver_wrapper.rs @@ -2,7 +2,7 @@ use core::fmt; use std::sync::{Arc}; use polywrap_core::{ - resolvers::{uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext, UriResolutionStep}, uri_resolver::UriResolver}, + resolution::{uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext, UriResolutionStep}, uri_resolver::UriResolver, helpers::UriResolverExtensionFileReader}, uri::Uri, error::Error, invoker::Invoker, }; @@ -10,8 +10,6 @@ use polywrap_msgpack::{msgpack, decode}; use polywrap_wasm::wasm_package::WasmPackage; use serde::{Serialize,Deserialize}; -use polywrap_core::resolvers::helpers::UriResolverExtensionFileReader; - pub struct UriResolverWrapper { pub implementation_uri: Uri } diff --git a/packages/resolvers/src/with_loop_guard_resolver.rs b/packages/resolvers/src/with_loop_guard_resolver.rs index 07721b6b56..1c3d034f31 100644 --- a/packages/resolvers/src/with_loop_guard_resolver.rs +++ b/packages/resolvers/src/with_loop_guard_resolver.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use polywrap_core::{ error::Error, invoker::Invoker, uri::Uri, - resolvers::{uri_resolver::UriResolver, uri_resolution_context::{UriResolutionContext, UriPackageOrWrapper}} + resolution::{uri_resolver::UriResolver, uri_resolution_context::{UriResolutionContext, UriPackageOrWrapper}} }; pub struct ResolverWithLoopGuard { diff --git a/packages/resolvers/src/wrapper_resolver.rs b/packages/resolvers/src/wrapper_resolver.rs index 81b69d340b..47ce4cdb11 100644 --- a/packages/resolvers/src/wrapper_resolver.rs +++ b/packages/resolvers/src/wrapper_resolver.rs @@ -1,11 +1,11 @@ use core::fmt; use std::sync::Arc; -use polywrap_core::resolvers::uri_resolution_context::UriResolutionStep; -use polywrap_core::resolvers::uri_resolver::UriResolver; +use polywrap_core::resolution::uri_resolution_context::UriResolutionStep; +use polywrap_core::resolution::uri_resolver::UriResolver; use polywrap_core::{uri::Uri, error::Error, wrapper::Wrapper, invoker::Invoker}; -use polywrap_core::resolvers::{ +use polywrap_core::resolution::{ uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, }; diff --git a/packages/wasm/tests/test_runtime.rs b/packages/wasm/tests/test_runtime.rs index b7bc97b04d..df8caf6211 100644 --- a/packages/wasm/tests/test_runtime.rs +++ b/packages/wasm/tests/test_runtime.rs @@ -4,7 +4,7 @@ use polywrap_core::{ invoker::{Invoker}, uri::Uri, error::Error, - file_reader::{SimpleFileReader}, resolvers::uri_resolution_context::UriResolutionContext, wrapper::Wrapper, env::Env, interface_implementation::InterfaceImplementations + file_reader::{SimpleFileReader}, resolution::uri_resolution_context::UriResolutionContext, wrapper::Wrapper, env::Env, interface_implementation::InterfaceImplementations }; use wrap_manifest_schemas::{ deserialize::deserialize_wrap_manifest From 25cc13f1ac533076b417ec0c793b02892e50d33f Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Thu, 18 May 2023 16:32:05 +0200 Subject: [PATCH 6/8] removed unecessary UriResolverAggregator from resovler_vec macro --- packages/client/src/client.rs | 2 +- packages/client/tests/test_env_with_invoke.rs | 2 +- packages/client/tests/test_interface_implementation.rs | 2 +- packages/client/tests/tests_subinvoke.rs | 4 ++-- packages/resolvers/src/resolver_vec.rs | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/client/src/client.rs b/packages/client/src/client.rs index 9dd6d97af7..52d9d2884c 100644 --- a/packages/client/src/client.rs +++ b/packages/client/src/client.rs @@ -266,7 +266,7 @@ mod client_tests { invoker::Invoker, resolution::{ uri_resolution_context::{UriPackageOrWrapper, UriResolutionContext}, - uri_resolver::{UriResolver, UriResolverHandler}, + uri_resolver::UriResolver, }, uri::Uri, wrapper::{GetFileOptions, Wrapper}, wrap_loader::WrapLoader, uri_resolver_handler::UriResolverHandler, diff --git a/packages/client/tests/test_env_with_invoke.rs b/packages/client/tests/test_env_with_invoke.rs index 3332d76f8b..94ff55180a 100644 --- a/packages/client/tests/test_env_with_invoke.rs +++ b/packages/client/tests/test_env_with_invoke.rs @@ -282,7 +282,7 @@ fn env_can_be_registered_for_any_uri_in_resolution_path() { let config = ClientConfig { envs: Some(envs), // Use the RecursiveResolver because it tracks resolution path (unlike BaseResolver) - resolver: Arc::new(RecursiveResolver::new(resolver_vec![ + resolver: Arc::new(RecursiveResolver::from(resolver_vec![ StaticResolver::new(resolvers), fs_resolver, ])), diff --git a/packages/client/tests/test_interface_implementation.rs b/packages/client/tests/test_interface_implementation.rs index 7250448d35..f7a671306b 100644 --- a/packages/client/tests/test_interface_implementation.rs +++ b/packages/client/tests/test_interface_implementation.rs @@ -4,9 +4,9 @@ use polywrap_client::msgpack::msgpack; use polywrap_core::client::ClientConfig; use polywrap_core::file_reader::SimpleFileReader; -use polywrap_core::resolution::static_resolver::StaticResolver; use polywrap_resolvers::base_resolver::BaseResolver; use polywrap_resolvers::simple_file_resolver::FilesystemResolver; +use polywrap_resolvers::static_resolver::StaticResolver; use polywrap_tests_utils::helpers::get_tests_path; use serde::Deserialize; use std::collections::HashMap; diff --git a/packages/client/tests/tests_subinvoke.rs b/packages/client/tests/tests_subinvoke.rs index ffa7c29c5f..4fedeb4205 100644 --- a/packages/client/tests/tests_subinvoke.rs +++ b/packages/client/tests/tests_subinvoke.rs @@ -5,11 +5,11 @@ use polywrap_client::client::PolywrapClient; use polywrap_client::core::uri::Uri; use polywrap_core::client::ClientConfig; use polywrap_core::file_reader::SimpleFileReader; -use polywrap_core::resolvers::static_resolver::StaticResolver; -use polywrap_core::resolvers::uri_resolution_context::UriPackageOrWrapper; +use polywrap_core::resolution::uri_resolution_context::UriPackageOrWrapper; use polywrap_msgpack::msgpack; use polywrap_resolvers::base_resolver::BaseResolver; use polywrap_resolvers::simple_file_resolver::FilesystemResolver; +use polywrap_resolvers::static_resolver::StaticResolver; use polywrap_tests_utils::helpers::get_tests_path; #[test] diff --git a/packages/resolvers/src/resolver_vec.rs b/packages/resolvers/src/resolver_vec.rs index b9335015d1..4b226d9f61 100644 --- a/packages/resolvers/src/resolver_vec.rs +++ b/packages/resolvers/src/resolver_vec.rs @@ -1,6 +1,6 @@ #[macro_export] macro_rules! resolver_vec { ($($resolver:expr),* $(,)?) => { - Box::new(UriResolverAggregator::from(vec![$(Box::from($resolver) as Box),*])) as Box + vec![$(Box::from($resolver) as Box),*] as Vec> }; } From a2a3273be2669ff508d4a1972ba40c259ca41b21 Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Thu, 18 May 2023 16:43:53 +0200 Subject: [PATCH 7/8] refactored RecursiveResolver and UriResolverAggregator from traits --- packages/builder/src/helpers.rs | 5 +++- .../src/resolution/uri_resolution_context.rs | 2 +- packages/resolvers/src/lib.rs | 2 +- packages/resolvers/src/recursive_resolver.rs | 25 ++++++------------- ...esolver.rs => resolver_with_loop_guard.rs} | 0 .../resolvers/src/uri_resolver_aggregator.rs | 13 +++++----- 6 files changed, 20 insertions(+), 27 deletions(-) rename packages/resolvers/src/{with_loop_guard_resolver.rs => resolver_with_loop_guard.rs} (100%) diff --git a/packages/builder/src/helpers.rs b/packages/builder/src/helpers.rs index e4af9c5097..d0450e40ca 100644 --- a/packages/builder/src/helpers.rs +++ b/packages/builder/src/helpers.rs @@ -6,7 +6,10 @@ use polywrap_core::{ uri_resolver::UriResolver, }, }; -use polywrap_resolvers::{extendable_uri_resolver::ExtendableUriResolver, uri_resolver_aggregator::UriResolverAggregator, static_resolver::{StaticResolverLike, StaticResolver}, recursive_resolver::RecursiveResolver, resolver_vec}; +use polywrap_resolvers::{ + extendable_uri_resolver::ExtendableUriResolver, + static_resolver::{StaticResolverLike, StaticResolver}, recursive_resolver::RecursiveResolver, resolver_vec +}; use serde_json::Value; use crate::types::BuilderConfig; diff --git a/packages/core/src/resolution/uri_resolution_context.rs b/packages/core/src/resolution/uri_resolution_context.rs index f03692fa07..d5eef9b46b 100644 --- a/packages/core/src/resolution/uri_resolution_context.rs +++ b/packages/core/src/resolution/uri_resolution_context.rs @@ -1,7 +1,7 @@ use crate::{package::WrapPackage, wrapper::Wrapper, error::Error}; use std::{collections::HashMap, sync::Arc, vec}; -use crate::{uri::Uri}; +use crate::uri::Uri; #[derive(Clone)] pub enum UriPackageOrWrapper { diff --git a/packages/resolvers/src/lib.rs b/packages/resolvers/src/lib.rs index 29699dbf1a..c7a6752d7c 100644 --- a/packages/resolvers/src/lib.rs +++ b/packages/resolvers/src/lib.rs @@ -9,5 +9,5 @@ pub mod static_resolver; pub mod recursive_resolver; pub mod uri_resolver_aggregator; pub mod uri_resolver_aggregator_base; -pub mod with_loop_guard_resolver; +pub mod resolver_with_loop_guard; pub mod resolver_vec; \ No newline at end of file diff --git a/packages/resolvers/src/recursive_resolver.rs b/packages/resolvers/src/recursive_resolver.rs index 9a5c232fbb..01106a8e20 100644 --- a/packages/resolvers/src/recursive_resolver.rs +++ b/packages/resolvers/src/recursive_resolver.rs @@ -14,30 +14,19 @@ pub struct RecursiveResolver { resolver: Arc, } -// impl From>> for RecursiveResolver { -// fn from(resolvers: Vec>) -> Self { -// RecursiveResolver::new( -// Arc::new( -// UriResolverAggregator::new( -// resolvers.into_iter().map(|resolver| resolver as Arc).collect() -// ) -// ) -// ) -// } -// } - impl From>> for RecursiveResolver { fn from(resolvers: Vec>) -> Self { - let aggregator = UriResolverAggregator::new(resolvers); - RecursiveResolver::new( - Arc::new(aggregator) + RecursiveResolver::from( + UriResolverAggregator::from(resolvers) ) } } -impl From> for RecursiveResolver { - fn from(resolver: Arc) -> Self { - RecursiveResolver::new(resolver) +impl From for RecursiveResolver { + fn from(resolver: UriResolverAggregator) -> Self { + RecursiveResolver::new( + Arc::new(resolver) + ) } } diff --git a/packages/resolvers/src/with_loop_guard_resolver.rs b/packages/resolvers/src/resolver_with_loop_guard.rs similarity index 100% rename from packages/resolvers/src/with_loop_guard_resolver.rs rename to packages/resolvers/src/resolver_with_loop_guard.rs diff --git a/packages/resolvers/src/uri_resolver_aggregator.rs b/packages/resolvers/src/uri_resolver_aggregator.rs index d3dd2bcff3..c218f2f441 100644 --- a/packages/resolvers/src/uri_resolver_aggregator.rs +++ b/packages/resolvers/src/uri_resolver_aggregator.rs @@ -15,7 +15,7 @@ pub struct UriResolverAggregator { } impl UriResolverAggregator { - pub fn new(resolvers: Vec>) -> Self { + pub fn new(resolvers: Vec>) -> Self { let resolvers = resolvers.into_iter().map(Arc::from).collect(); Self { name: None, @@ -81,13 +81,14 @@ impl fmt::Debug for UriResolverAggregator { } } -// impl From>> for UriResolverAggregator { -// fn from(resolvers: Vec>) -> Self { -// UriResolverAggregator::new(resolvers) -// } -// } impl From>> for UriResolverAggregator { fn from(resolvers: Vec>) -> Self { + UriResolverAggregator::new(resolvers.into_iter().map(Arc::from).collect()) + } +} + +impl From>> for UriResolverAggregator { + fn from(resolvers: Vec>) -> Self { UriResolverAggregator::new(resolvers) } } \ No newline at end of file From 3272e28d1360606c0c6993c7341497e486532722 Mon Sep 17 00:00:00 2001 From: Jure Bogunovic Date: Thu, 18 May 2023 17:37:05 +0200 Subject: [PATCH 8/8] removed uneccesary curly braces --- packages/builder/tests/test_builder.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/builder/tests/test_builder.rs b/packages/builder/tests/test_builder.rs index d6c0c5474e..41e991954b 100644 --- a/packages/builder/tests/test_builder.rs +++ b/packages/builder/tests/test_builder.rs @@ -1,6 +1,6 @@ #![feature(closure_lifetime_binder)] #![feature(trait_upcasting)] -use std::{collections::HashMap}; +use std::collections::HashMap; use polywrap_client_builder::types::{BuilderConfig, ClientBuilder}; use polywrap_core::{ @@ -241,4 +241,4 @@ fn test_wrappers() { let mock_wrapper_as_any = &*(mock_wrapper) as &dyn std::any::Any; let expected_wrapper = mock_wrapper_as_any.downcast_ref::().unwrap(); assert_eq!(received_wrapper.name, expected_wrapper.name); -} \ No newline at end of file +}