use crate::models::serde_helpers::is_zero_i32;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct APIPermissions {
#[serde(default, rename = "apis", skip_serializing_if = "Vec::is_empty")]
pub api_list: Vec<APIPermission>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct APIPermission {
#[serde(default, skip_serializing_if = "String::is_empty")]
pub path: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub method: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub desc: String,
#[serde(default, skip_serializing_if = "is_zero_i32")]
pub auth_status: i32,
}
impl APIPermission {
pub fn new(
path: impl Into<String>,
method: impl Into<String>,
desc: Option<String>,
auth_status: Option<i32>,
) -> Self {
Self {
path: path.into(),
method: method.into(),
desc: desc.unwrap_or_default(),
auth_status: auth_status.unwrap_or_default(),
}
}
pub fn is_authorized(&self) -> bool {
self.auth_status == 1
}
pub fn is_unauthorized(&self) -> bool {
self.auth_status == 0
}
pub fn auth_status_string(&self) -> &'static str {
match self.auth_status {
0 => "Unauthorized",
1 => "Authorized",
_ => "Unknown",
}
}
}