use crate::error::PluginError;
use crate::meta::{PluginCapabilities, PluginCapability, PluginMeta};
use crate::result::PluginResult;
use crate::version::{AbiVersion, SchemaVersionRange};
pub type PluginInput = serde_json::Value;
pub struct PluginIdentity {
pub sector: &'static str,
pub name: &'static str,
pub version: &'static str,
pub description: &'static str,
}
pub trait DppSectorPlugin: Send + Sync {
fn plugin_identity(&self) -> PluginIdentity;
fn schema_version_range(&self) -> SchemaVersionRange;
fn meta(&self) -> PluginMeta {
let id = self.plugin_identity();
PluginMeta {
sector: id.sector.to_owned(),
name: id.name.to_owned(),
version: id.version.to_owned(),
license: "Apache-2.0".to_owned(),
description: Some(id.description.to_owned()),
author: Some("Odal Node".to_owned()),
homepage: Some("https://github.com/odal-node/dpp-core".to_owned()),
}
}
fn capabilities(&self) -> PluginCapabilities {
PluginCapabilities {
abi_version: AbiVersion::current(),
supported_schemas: vec![self.schema_version_range()],
capabilities: vec![
PluginCapability::Validate,
PluginCapability::ComputeMetrics,
PluginCapability::GeneratePassport,
],
min_host_version: None,
max_fuel: None,
max_memory_bytes: None,
}
}
fn validate_input(&self, input: &PluginInput) -> Result<(), PluginError>;
fn calculate_metrics(&self, input: &PluginInput) -> Result<PluginResult, PluginError>;
fn generate_passport(&self, input: PluginInput) -> Result<serde_json::Value, PluginError>;
}