vynil-core 0.7.6

A Rust toolbox for bootstrapping projects combining a Rhai scripting engine and a Handlebars templating engine, with optional Kubernetes / OCI / S3 handlers.
Documentation
//! Mock OCI registry for tests. See [`crate::oci::Registry`] for the real client.

use crate::RhaiRes;
use rhai::{Dynamic, Engine};

#[derive(Clone, Debug)]
pub struct OciRegistryMock;

impl OciRegistryMock {
    pub fn list_tags(&mut self, _repository: String) -> RhaiRes<Dynamic> {
        Ok(Dynamic::from_array(vec![]))
    }

    pub fn get_manifest(&mut self, _repository: String, _tag: String) -> RhaiRes<Dynamic> {
        let mut map = rhai::Map::new();
        map.insert("annotations".into(), Dynamic::from_map(rhai::Map::new()));
        Ok(Dynamic::from_map(map))
    }

    pub fn push_image(
        &mut self,
        _dir: String,
        _repo: String,
        _tag: String,
        _ann: Dynamic,
    ) -> RhaiRes<rhai::ImmutableString> {
        Ok("sha256:mock-digest-for-testing".into())
    }

    pub fn sign_image(&mut self, _repo: String, _tag: String, _digest: String, _key: String) -> RhaiRes<()> {
        Ok(())
    }
}

pub fn oci_mock_rhai_register(engine: &mut Engine) {
    engine
        .register_type_with_name::<OciRegistryMock>("OciRegistryMock")
        .register_fn("new_registry", |_: String, _: String, _: String| OciRegistryMock)
        .register_fn("list_tags", OciRegistryMock::list_tags)
        .register_fn("get_manifest", OciRegistryMock::get_manifest)
        .register_fn("push_image", OciRegistryMock::push_image)
        .register_fn("sign_image", OciRegistryMock::sign_image);
}