shepherd_rs/database/
db.rs1use std::error::Error;
2use std::sync::Arc;
3
4use async_trait::async_trait;
5use tokio::sync::Mutex;
6
7use crate::config::Config;
8use crate::consumer::ConsumeAttempt;
9use crate::consumer::consumer::ConsumeAttemptResult;
10use crate::transform::{TransformAttempt, TransformRequest};
11use crate::worker::worker_manager::WorkerManagerResult;
12
13#[async_trait]
14pub trait Database: Send + Sync {
15 type Input;
16 type Output;
17 type Config: Config;
18
19 type TransformRequest: TransformRequest<Input = Self::Input, Output = Self::Output>;
20 type TransformAttempt: TransformAttempt<CallArgsType = Self::Input, ReturnType = Self::Output>;
21 type ConsumeAttempt: ConsumeAttempt<ConsumeVal = Self::Output>;
22 type DatabaseError: Send + Sync + Error;
23
24 async fn new(ctx: Arc<Mutex<Self::Config>>) -> Result<Self, Self::DatabaseError>
25 where
26 Self: Sized;
27
28 async fn get_dyn_configs(
29 &mut self,
30 ) -> Result<
31 Vec<(
32 <Self::Config as Config>::KeyType,
33 <Self::Config as Config>::ValueType,
34 )>,
35 Self::DatabaseError,
36 >;
37
38 async fn register_transform_request(
39 &mut self,
40 request: &Self::TransformRequest,
41 ) -> Result<(), Self::DatabaseError>;
42
43 async fn register_transform_attempt(
44 &mut self,
45 attempt: &Self::TransformAttempt,
46 ) -> Result<(), Self::DatabaseError>;
47
48 async fn update_transform_attempt(
49 &mut self,
50 attempt: &WorkerManagerResult<Self::TransformAttempt>,
51 ) -> Result<(), Self::DatabaseError>;
52
53 async fn register_consume_attempt(
54 &mut self,
55 attempt: &Self::ConsumeAttempt,
56 ) -> Result<(), Self::DatabaseError>;
57
58 async fn update_consume_attempt(
59 &mut self,
60 attempt: ConsumeAttemptResult<Self::ConsumeAttempt>,
61 ) -> Result<(), Self::DatabaseError>;
62
63 async fn archive_request_with_id(
64 &mut self,
65 request: &<Self::TransformRequest as TransformRequest>::Identifier,
66 ) -> Result<(), Self::DatabaseError>;
67}