use crate::prelude::PortId;
use crate::types::{Configuration, NodeId};
use crate::zferror;
use crate::zfresult::{ErrorKind, ZFResult as Result};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
pub struct SourceDescriptor {
pub id: NodeId,
pub outputs: Vec<PortId>,
pub uri: Option<String>,
pub configuration: Option<Configuration>,
}
impl std::fmt::Display for SourceDescriptor {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "{} - Kind: Source", self.id)
}
}
impl SourceDescriptor {
pub fn from_yaml(data: &str) -> Result<Self> {
let dataflow_descriptor = serde_yaml::from_str::<SourceDescriptor>(data)
.map_err(|e| zferror!(ErrorKind::ParsingError, e))?;
Ok(dataflow_descriptor)
}
pub fn from_json(data: &str) -> Result<Self> {
let dataflow_descriptor = serde_json::from_str::<SourceDescriptor>(data)
.map_err(|e| zferror!(ErrorKind::ParsingError, e))?;
Ok(dataflow_descriptor)
}
pub fn to_json(&self) -> Result<String> {
serde_json::to_string(&self).map_err(|e| zferror!(ErrorKind::SerializationError, e).into())
}
pub fn to_yaml(&self) -> Result<String> {
serde_yaml::to_string(&self).map_err(|e| zferror!(ErrorKind::SerializationError, e).into())
}
}