use crate::proto::tero::policy::v1::{LogTarget, MetricTarget, Policy as ProtoPolicy, TraceTarget};
#[derive(Debug, Clone)]
pub struct Policy {
pub(crate) proto: ProtoPolicy,
}
impl Policy {
pub fn new(proto: ProtoPolicy) -> Self {
Self { proto }
}
pub fn id(&self) -> &str {
&self.proto.id
}
pub fn name(&self) -> &str {
&self.proto.name
}
pub fn description(&self) -> &str {
&self.proto.description
}
pub fn enabled(&self) -> bool {
self.proto.enabled
}
pub fn log_target(&self) -> Option<&LogTarget> {
match &self.proto.target {
Some(crate::proto::tero::policy::v1::policy::Target::Log(t)) => Some(t),
_ => None,
}
}
pub fn metric_target(&self) -> Option<&MetricTarget> {
match &self.proto.target {
Some(crate::proto::tero::policy::v1::policy::Target::Metric(t)) => Some(t),
_ => None,
}
}
pub fn trace_target(&self) -> Option<&TraceTarget> {
match &self.proto.target {
Some(crate::proto::tero::policy::v1::policy::Target::Trace(t)) => Some(t),
_ => None,
}
}
pub fn proto(&self) -> &ProtoPolicy {
&self.proto
}
pub fn into_proto(self) -> ProtoPolicy {
self.proto
}
}
impl From<ProtoPolicy> for Policy {
fn from(proto: ProtoPolicy) -> Self {
Self::new(proto)
}
}
impl From<Policy> for ProtoPolicy {
fn from(policy: Policy) -> Self {
policy.into_proto()
}
}