use crate::error::{Error, Result};
use crate::message::policy::Policy;
use crate::TapMessage;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, TapMessage)]
#[tap(
message_type = "https://tap.rsvp/schema/1.0#UpdatePolicies",
custom_validation
)]
pub struct UpdatePolicies {
#[tap(thread_id)]
pub transaction_id: String,
pub policies: Vec<Policy>,
}
impl UpdatePolicies {
pub fn new(transaction_id: &str, policies: Vec<Policy>) -> Self {
Self {
transaction_id: transaction_id.to_string(),
policies,
}
}
pub fn validate_updatepolicies(&self) -> Result<()> {
if self.transaction_id.is_empty() {
return Err(Error::Validation(
"UpdatePolicies must have a transaction_id".to_string(),
));
}
if self.policies.is_empty() {
return Err(Error::Validation(
"UpdatePolicies must have at least one policy".to_string(),
));
}
for policy in &self.policies {
policy.validate()?;
}
Ok(())
}
}