use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::traits::{Resource, ResourceKind};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct KnowledgeBase {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub storage_connection_string_secret: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub storage_container: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub identity: Option<Value>,
#[serde(flatten)]
pub extra: std::collections::HashMap<String, Value>,
}
impl Resource for KnowledgeBase {
fn kind() -> ResourceKind {
ResourceKind::KnowledgeBase
}
fn name(&self) -> &str {
&self.name
}
fn volatile_fields() -> &'static [&'static str] {
&[
"@odata.etag",
"@odata.context",
"storageConnectionStringSecret",
]
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_knowledge_base_kind() {
assert_eq!(KnowledgeBase::kind(), ResourceKind::KnowledgeBase);
}
#[test]
fn test_knowledge_base_volatile_fields() {
let fields = KnowledgeBase::volatile_fields();
assert!(fields.contains(&"storageConnectionStringSecret"));
assert!(!fields.contains(&"knowledgeSources"));
}
#[test]
fn test_knowledge_base_knowledge_sources_is_pushable() {
let volatile = KnowledgeBase::volatile_fields();
let read_only = KnowledgeBase::read_only_fields();
assert!(!volatile.contains(&"knowledgeSources"));
assert!(!read_only.contains(&"knowledgeSources"));
}
#[test]
fn test_knowledge_base_deserialize() {
let json = r#"{
"name": "my-kb",
"description": "test kb"
}"#;
let kb: KnowledgeBase = serde_json::from_str(json).unwrap();
assert_eq!(kb.name, "my-kb");
assert_eq!(kb.description.as_deref(), Some("test kb"));
}
}