use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct TableRole {
pub table_perm: i32,
#[serde(skip_serializing_if = "Option::is_none")]
pub table_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub table_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub rec_rule: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub field_perm: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_add_record: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub allow_delete_record: Option<bool>,
}
impl TableRole {
pub fn new(table_perm: i32) -> Self {
Self {
table_perm,
table_name: None,
table_id: None,
rec_rule: None,
field_perm: None,
allow_add_record: None,
allow_delete_record: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct BlockRole {
pub block_id: String,
pub block_perm: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Role {
pub role_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub role_id: Option<String>,
pub table_roles: Vec<TableRole>,
#[serde(skip_serializing_if = "Option::is_none")]
pub block_roles: Option<Vec<BlockRole>>,
}
#[cfg(test)]
mod tests {
use serde_json;
#[test]
fn test_serialization_roundtrip() {
let json = r#"{"test": "value"}"#;
assert!(serde_json::from_str::<serde_json::Value>(json).is_ok());
}
#[test]
fn test_deserialization_from_json() {
let json = r#"{"field": "data"}"#;
let value: serde_json::Value = serde_json::from_str(json).unwrap();
assert_eq!(value["field"], "data");
}
}