crux_core/capability/
mod.rs1#[cfg(feature = "facet_typegen")]
2use crate::type_generation::facet::TypeGenError;
3
4pub trait Operation: Send + 'static {
16 type Output: Send + Unpin + 'static;
18
19 #[cfg(feature = "typegen")]
20 #[allow(clippy::missing_errors_doc)]
21 fn register_types(
22 generator: &mut crate::type_generation::serde::TypeGen,
23 ) -> crate::type_generation::serde::Result
24 where
25 Self: serde::Serialize + for<'de> serde::de::Deserialize<'de>,
26 Self::Output: for<'de> serde::de::Deserialize<'de>,
27 {
28 generator.register_type::<Self>()?;
29 generator.register_type::<Self::Output>()?;
30 Ok(())
31 }
32
33 #[cfg(feature = "facet_typegen")]
34 #[allow(clippy::missing_errors_doc)]
35 fn register_types_facet<'a>(
36 generator: &mut crate::type_generation::facet::TypeRegistry,
37 ) -> Result<&mut crate::type_generation::facet::TypeRegistry, TypeGenError>
38 where
39 Self: facet::Facet<'a> + serde::Serialize + for<'de> serde::de::Deserialize<'de>,
40 <Self as Operation>::Output: facet::Facet<'a> + for<'de> serde::de::Deserialize<'de>,
41 {
42 generator
43 .register_type::<Self>()
44 .map_err(|e| TypeGenError::Generation(e.to_string()))?
45 .register_type::<Self::Output>()
46 .map_err(|e| TypeGenError::Generation(e.to_string()))?;
47
48 Ok(generator)
49 }
50}