rskit_skill/
verification.rs1use std::path::Path;
4
5use crate::{Manifest, SkillError};
6
7#[derive(Debug, Clone, PartialEq, Eq)]
9#[non_exhaustive]
10pub enum VerificationOutcome {
11 Verified,
13 Warning(Vec<String>),
15 Denied(String),
17}
18
19pub trait Verifier: Send + Sync {
21 fn verify(&self, manifest: &Manifest, root: &Path) -> Result<VerificationOutcome, SkillError>;
23}
24
25#[derive(Debug, Default, Clone, Copy)]
27pub struct WarnOnlyVerifier;
28
29impl Verifier for WarnOnlyVerifier {
30 fn verify(&self, manifest: &Manifest, _root: &Path) -> Result<VerificationOutcome, SkillError> {
31 if manifest.signature.is_some() {
32 Ok(VerificationOutcome::Verified)
33 } else {
34 Ok(VerificationOutcome::Warning(vec![
35 "unsigned skill manifest".to_string(),
36 ]))
37 }
38 }
39}
40
41#[derive(Debug, Default, Clone, Copy)]
44pub struct DenyVerifier;
45
46impl Verifier for DenyVerifier {
47 fn verify(
48 &self,
49 _manifest: &Manifest,
50 _root: &Path,
51 ) -> Result<VerificationOutcome, SkillError> {
52 Ok(VerificationOutcome::Denied(
53 "deny verifier: signatures rejected".to_string(),
54 ))
55 }
56}