From f66e644d7090123e3b69a77665f3bf06f32dbf0b Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Tue, 2 Jul 2024 15:22:27 +0800 Subject: [PATCH 1/3] Reorganize re-exports in cgp-core --- crates/cgp-core/src/lib.rs | 13 ++++--------- crates/cgp-error-eyre/src/lib.rs | 2 +- crates/cgp-error-std/src/lib.rs | 2 +- crates/cgp-error/src/lib.rs | 2 ++ 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/crates/cgp-core/src/lib.rs b/crates/cgp-core/src/lib.rs index f106804..e5b2b4b 100644 --- a/crates/cgp-core/src/lib.rs +++ b/crates/cgp-core/src/lib.rs @@ -3,12 +3,7 @@ pub mod prelude; pub use cgp_async::{async_trait, Async}; -pub use cgp_component::{ - define_components, delegate_components, derive_component, DelegateComponent, HasComponents, -}; -pub use cgp_error::{ - CanRaiseError, ErrorRaiser, ErrorRaiserComponent, ErrorTypeComponent, HasErrorType, - ProvideErrorType, -}; -pub use cgp_inner::{HasInner, InnerComponent, ProvideInner}; -pub use cgp_run::{CanRun, Runner, RunnerComponent}; +pub use cgp_component as component; +pub use cgp_error as error; +pub use cgp_inner as inner; +pub use cgp_run as run; diff --git a/crates/cgp-error-eyre/src/lib.rs b/crates/cgp-error-eyre/src/lib.rs index aea208f..7c18475 100644 --- a/crates/cgp-error-eyre/src/lib.rs +++ b/crates/cgp-error-eyre/src/lib.rs @@ -2,7 +2,7 @@ use core::fmt::{Debug, Display}; use std::error::Error as StdError; use cgp_core::prelude::*; -use cgp_core::{ErrorRaiser, ProvideErrorType}; +use cgp_core::error::{ErrorRaiser, ProvideErrorType}; use eyre::{eyre, Report}; pub struct ProvideEyreError; diff --git a/crates/cgp-error-std/src/lib.rs b/crates/cgp-error-std/src/lib.rs index d76d7e8..4af4f6e 100644 --- a/crates/cgp-error-std/src/lib.rs +++ b/crates/cgp-error-std/src/lib.rs @@ -1,7 +1,7 @@ use std::error::Error as StdError; use cgp_core::prelude::*; -use cgp_core::{ErrorRaiser, ProvideErrorType}; +use cgp_core::error::{ErrorRaiser, ProvideErrorType}; pub type Error = Box; diff --git a/crates/cgp-error/src/lib.rs b/crates/cgp-error/src/lib.rs index 12e76d7..f9e6c96 100644 --- a/crates/cgp-error/src/lib.rs +++ b/crates/cgp-error/src/lib.rs @@ -25,6 +25,8 @@ pub trait HasErrorType: Async { type Error: Async + Debug; } +pub type ErrorOf = ::Error; + /** Used for injecting external error types into [`Self::Error`](HasErrorType::Error). From edbae0a8a03331b08be03c533ad10c4340c223d3 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Tue, 2 Jul 2024 16:35:19 +0800 Subject: [PATCH 2/3] Add DelegateErrorRaiser --- crates/cgp-error-eyre/src/lib.rs | 2 +- crates/cgp-error-std/src/lib.rs | 2 +- crates/cgp-error/src/can_raise_error.rs | 17 +++++++++ crates/cgp-error/src/delegate_error.rs | 19 ++++++++++ crates/cgp-error/src/has_error_type.rs | 28 +++++++++++++++ crates/cgp-error/src/lib.rs | 46 ++++--------------------- 6 files changed, 72 insertions(+), 42 deletions(-) create mode 100644 crates/cgp-error/src/can_raise_error.rs create mode 100644 crates/cgp-error/src/delegate_error.rs create mode 100644 crates/cgp-error/src/has_error_type.rs diff --git a/crates/cgp-error-eyre/src/lib.rs b/crates/cgp-error-eyre/src/lib.rs index 7c18475..844ab00 100644 --- a/crates/cgp-error-eyre/src/lib.rs +++ b/crates/cgp-error-eyre/src/lib.rs @@ -1,8 +1,8 @@ use core::fmt::{Debug, Display}; use std::error::Error as StdError; -use cgp_core::prelude::*; use cgp_core::error::{ErrorRaiser, ProvideErrorType}; +use cgp_core::prelude::*; use eyre::{eyre, Report}; pub struct ProvideEyreError; diff --git a/crates/cgp-error-std/src/lib.rs b/crates/cgp-error-std/src/lib.rs index 4af4f6e..7b2a5a5 100644 --- a/crates/cgp-error-std/src/lib.rs +++ b/crates/cgp-error-std/src/lib.rs @@ -1,7 +1,7 @@ use std::error::Error as StdError; -use cgp_core::prelude::*; use cgp_core::error::{ErrorRaiser, ProvideErrorType}; +use cgp_core::prelude::*; pub type Error = Box; diff --git a/crates/cgp-error/src/can_raise_error.rs b/crates/cgp-error/src/can_raise_error.rs new file mode 100644 index 0000000..9dbba85 --- /dev/null +++ b/crates/cgp-error/src/can_raise_error.rs @@ -0,0 +1,17 @@ +use cgp_async::Async; +use cgp_component::{derive_component, DelegateComponent, HasComponents}; + +use crate::has_error_type::HasErrorType; + +/** + Used for injecting external error types into [`Self::Error`](HasErrorType::Error). + + As an example, if `Context: CanRaiseError`, then we would be + able to call `Context::raise_error(err)` for an error value + [`err: ParseIntError`](core::num::ParseIntError) and get back + a [`Context::Error`](HasErrorType::Error) value. +*/ +#[derive_component(ErrorRaiserComponent, ErrorRaiser)] +pub trait CanRaiseError: HasErrorType { + fn raise_error(e: E) -> Self::Error; +} diff --git a/crates/cgp-error/src/delegate_error.rs b/crates/cgp-error/src/delegate_error.rs new file mode 100644 index 0000000..378a61c --- /dev/null +++ b/crates/cgp-error/src/delegate_error.rs @@ -0,0 +1,19 @@ +use core::marker::PhantomData; + +use cgp_component::DelegateComponent; + +use crate::{ErrorRaiser, HasErrorType}; + +pub struct DelegateErrorRaiser(pub PhantomData); + +impl ErrorRaiser + for DelegateErrorRaiser +where + Context: HasErrorType, + Components: DelegateComponent, + Delegate: ErrorRaiser, +{ + fn raise_error(e: Error) -> Context::Error { + Delegate::raise_error(e) + } +} diff --git a/crates/cgp-error/src/has_error_type.rs b/crates/cgp-error/src/has_error_type.rs new file mode 100644 index 0000000..e446727 --- /dev/null +++ b/crates/cgp-error/src/has_error_type.rs @@ -0,0 +1,28 @@ +use core::fmt::Debug; + +use cgp_async::Async; +use cgp_component::{derive_component, DelegateComponent, HasComponents}; + +/** + This is used for contexts to declare that they have a _unique_ `Self::Error` type. + + Although it is possible for each context to declare their own associated + `Error` type, doing so may result in having multiple ambiguous `Self::Error` types, + if there are multiple associated types with the same name in different traits. + + As a result, it is better for context traits to include `HasError` as their + parent traits, so that multiple traits can all refer to the same abstract + `Self::Error` type. +*/ +#[derive_component(ErrorTypeComponent, ProvideErrorType)] +pub trait HasErrorType: Async { + /** + The `Error` associated type is also required to implement [`Debug`]. + + This is to allow `Self::Error` to be used in calls like `.unwrap()`, + as well as for simpler error logging. + */ + type Error: Async + Debug; +} + +pub type ErrorOf = ::Error; diff --git a/crates/cgp-error/src/lib.rs b/crates/cgp-error/src/lib.rs index f9e6c96..122a245 100644 --- a/crates/cgp-error/src/lib.rs +++ b/crates/cgp-error/src/lib.rs @@ -1,41 +1,7 @@ -use core::fmt::Debug; +mod can_raise_error; +mod delegate_error; +mod has_error_type; -use cgp_async::Async; -use cgp_component::{derive_component, DelegateComponent, HasComponents}; - -/** - This is used for contexts to declare that they have a _unique_ `Self::Error` type. - - Although it is possible for each context to declare their own associated - `Error` type, doing so may result in having multiple ambiguous `Self::Error` types, - if there are multiple associated types with the same name in different traits. - - As a result, it is better for context traits to include `HasError` as their - parent traits, so that multiple traits can all refer to the same abstract - `Self::Error` type. -*/ -#[derive_component(ErrorTypeComponent, ProvideErrorType)] -pub trait HasErrorType: Async { - /** - The `Error` associated type is also required to implement [`Debug`]. - - This is to allow `Self::Error` to be used in calls like `.unwrap()`, - as well as for simpler error logging. - */ - type Error: Async + Debug; -} - -pub type ErrorOf = ::Error; - -/** - Used for injecting external error types into [`Self::Error`](HasErrorType::Error). - - As an example, if `Context: CanRaiseError`, then we would be - able to call `Context::raise_error(err)` for an error value - [`err: ParseIntError`](core::num::ParseIntError) and get back - a [`Context::Error`](HasErrorType::Error) value. -*/ -#[derive_component(ErrorRaiserComponent, ErrorRaiser)] -pub trait CanRaiseError: HasErrorType { - fn raise_error(e: E) -> Self::Error; -} +pub use can_raise_error::*; +pub use delegate_error::*; +pub use has_error_type::*; From 9cf7e96c5cfc4a07c1d69ac9882c0bff60839a20 Mon Sep 17 00:00:00 2001 From: Soares Chen Date: Tue, 2 Jul 2024 16:35:47 +0800 Subject: [PATCH 3/3] Reformat imports --- crates/cgp-component-macro-lib/src/lib.rs | 3 +-- crates/cgp-core/src/lib.rs | 5 +---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/crates/cgp-component-macro-lib/src/lib.rs b/crates/cgp-component-macro-lib/src/lib.rs index 058935f..2a3d2bb 100644 --- a/crates/cgp-component-macro-lib/src/lib.rs +++ b/crates/cgp-component-macro-lib/src/lib.rs @@ -4,6 +4,5 @@ pub mod derive_component; #[cfg(test)] mod tests; -pub use crate::delegate_components::define_components; -pub use crate::delegate_components::delegate_components; +pub use crate::delegate_components::{define_components, delegate_components}; pub use crate::derive_component::derive_component; diff --git a/crates/cgp-core/src/lib.rs b/crates/cgp-core/src/lib.rs index e5b2b4b..ff1478c 100644 --- a/crates/cgp-core/src/lib.rs +++ b/crates/cgp-core/src/lib.rs @@ -3,7 +3,4 @@ pub mod prelude; pub use cgp_async::{async_trait, Async}; -pub use cgp_component as component; -pub use cgp_error as error; -pub use cgp_inner as inner; -pub use cgp_run as run; +pub use {cgp_component as component, cgp_error as error, cgp_inner as inner, cgp_run as run};