JavaScript is disabled, refresh for a better experience. ambee/giterated

ambee/giterated

Git repository hosting, collaboration, and discovery for the Fediverse.

Beginning of `stack-next` refactor

-Refactoring the protocol stack into something similar to a runtime. -Handles merging handler builders which is placing the ground work for plugins in. - Increased metadata generation during compilation enables less ser/de during execution. - Goal is to have an O(1) time from incoming operation to calling handlers. - Decreased penalty for using the statically typed API from within your code, now avoids some allocation. # Changes - Added `GiteratedRuntime` which is to replace the current unified stack - Added `RuntimeBuilder` which does what the current `OperationHandlers` struct does, but much better. - Added `RuntimeMetadata` to store type metadata for new `Any` based internals - Refactored serde_json out of the internal operation handling

Amber - ⁨2⁩ years ago

parent: tbd commit: ⁨708dea4

⁨giterated-models/src/object_backend.rs⁩ - ⁨765⁩ bytes
Raw
1 use crate::{
2 error::OperationError,
3 object::{GiteratedObject, Object, ObjectRequestError},
4 operation::GiteratedOperation,
5 };
6
7 use std::fmt::Debug;
8
9 #[async_trait::async_trait]
10 pub trait ObjectBackend<S: Clone + Send + Sync>: Send + Sync + Sized + Clone {
11 async fn object_operation<O, D>(
12 &self,
13 object: O,
14 operation: &str,
15 payload: D,
16 operation_state: &S,
17 ) -> Result<D::Success, OperationError<D::Failure>>
18 where
19 O: GiteratedObject + Debug + 'static,
20 D: GiteratedOperation<O> + Debug;
21
22 async fn get_object<O: GiteratedObject + Debug>(
23 &self,
24 object_str: &str,
25 operation_state: &S,
26 ) -> Result<Object<S, O, Self>, OperationError<ObjectRequestError>>;
27 }
28