use crate::services::flex::gcl::ToGcl;
use serde::Serialize;
#[derive(Debug, Clone)]
pub struct PolicyConfig {
name: String,
config: String,
}
impl PolicyConfig {
fn new() -> Self {
Self {
name: "test-policy".to_string(),
config: "{}".to_string(),
}
}
pub fn builder() -> PolicyConfigBuilder {
PolicyConfigBuilder::new()
}
}
#[derive(Debug, Clone)]
pub struct PolicyConfigBuilder {
config: PolicyConfig,
}
impl PolicyConfigBuilder {
fn new() -> Self {
Self {
config: PolicyConfig::new(),
}
}
pub fn name<T: Into<String>>(self, name: T) -> Self {
Self {
config: PolicyConfig {
name: name.into(),
..self.config
},
}
}
pub fn configuration<T: Serialize>(self, config: T) -> Self {
Self {
config: PolicyConfig {
config: serde_json::to_string(&config).unwrap_or_else(|_| "{}".to_string()),
..self.config
},
}
}
pub fn build(self) -> PolicyConfig {
self.config
}
}
impl ToGcl for PolicyConfig {
fn to_gcl(&self) -> String {
let name = self.name.as_str();
let config = self.config.as_str();
format!(
r#"
- policyRef:
name: {name}
namespace: default
config: {config}"#
)
}
fn name(&self) -> &str {
&self.name
}
}