1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//! Sources

mod dispatch;
mod file;
mod http;

pub use dispatch::*;
pub use file::*;
pub use http::*;

use crate::discover::DiscoveredAdvisory;
use crate::model::metadata::{Distribution, ProviderMetadata};
use crate::retrieve::RetrievedAdvisory;
use async_trait::async_trait;
use std::fmt::{Debug, Display};

/// A source of CSAF documents
#[async_trait(?Send)]
pub trait Source: Clone {
    type Error: Display + Debug;

    async fn load_metadata(&self) -> Result<ProviderMetadata, Self::Error>;
    async fn load_index(
        &self,
        distribution: &Distribution,
    ) -> Result<Vec<DiscoveredAdvisory>, Self::Error>;
    async fn load_advisory(
        &self,
        advisory: DiscoveredAdvisory,
    ) -> Result<RetrievedAdvisory, Self::Error>;
}