guardian_db/ipfs_log/
access_controller.rs

1use crate::ipfs_log::identity::Identity;
2use crate::ipfs_log::identity_provider::IdentityProvider;
3
4/// Representa uma entrada de log.
5/// Equivalente ao `LogEntry` em Go.
6pub trait LogEntry: Send + Sync {
7    fn get_payload(&self) -> &[u8];
8    fn get_identity(&self) -> &Identity;
9}
10
11/// Representa um contexto adicional para a verificação do append.
12/// Equivalente ao `CanAppendAdditionalContext` em Go.
13pub trait CanAppendAdditionalContext: Send + Sync {
14    fn get_log_entries(&self) -> Vec<Box<dyn LogEntry>>;
15}
16
17/// Equivalente ao `Interface` em Go.
18/// Define a regra de negócio para verificar se um `LogEntry` pode ser anexado.
19pub trait CanAppend {
20    fn can_append(
21        &self,
22        entry: &dyn LogEntry,
23        identity_provider: &dyn IdentityProvider,
24        context: &dyn CanAppendAdditionalContext,
25    ) -> Result<(), Box<dyn std::error::Error>>;
26}