use std::time::Duration;
use frame_capability::CapabilityRequest;
use serde::{Deserialize, Serialize};
pub use frame_capability::{ComponentId, ComponentIdParseError};
#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
pub struct ComponentMeta {
pub id: ComponentId,
pub name: String,
pub version: String,
pub requires: Vec<ComponentId>,
pub provides: Vec<ServiceCapability>,
pub needs: Vec<CapabilityRequest>,
pub children: Vec<ChildSpec>,
pub supervision: Option<SupervisionPolicy>,
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
pub struct ServiceCapability {
pub id: String,
pub description: String,
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
pub struct ChildSpec {
pub name: String,
pub module: String,
pub function: String,
pub arguments: Vec<ChildArgument>,
pub liveness_message: i64,
pub stop_message: i64,
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
pub enum ChildArgument {
SupervisorPid,
Integer(i64),
Atom(String),
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)]
pub struct SupervisionPolicy {
pub max_restarts: usize,
pub window: Duration,
}