Skip to main content

shepherd_rs/database/
db.rs

1use 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}