use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Hash)]
pub enum FieldType {
String,
Number,
Boolean,
Date,
Object, Array,
Pointer,
Relation,
File,
GeoPoint,
ACL,
Bytes,
Polygon,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
pub struct FieldSchema {
#[serde(rename = "type")]
pub field_type: FieldType,
#[serde(rename = "targetClass", skip_serializing_if = "Option::is_none")]
pub target_class: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub required: Option<bool>,
#[serde(rename = "defaultValue", skip_serializing_if = "Option::is_none")]
pub default_value: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Default)]
#[serde(rename_all = "camelCase")]
pub struct ClassLevelPermissionsSchema {
#[serde(skip_serializing_if = "Option::is_none")]
pub get: Option<HashMap<String, bool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub find: Option<HashMap<String, bool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub count: Option<HashMap<String, bool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub create: Option<HashMap<String, bool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub update: Option<HashMap<String, bool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub delete: Option<HashMap<String, bool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub add_field: Option<HashMap<String, bool>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub read_user_fields: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub write_user_fields: Option<Vec<String>>,
}
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
#[serde(untagged)]
pub enum IndexFieldType {
SortOrder(i32),
Text(String),
Other(Value),
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ParseSchema {
pub class_name: String,
pub fields: HashMap<String, FieldSchema>,
#[serde(skip_serializing_if = "Option::is_none")]
pub class_level_permissions: Option<ClassLevelPermissionsSchema>,
#[serde(skip_serializing_if = "Option::is_none")]
pub indexes: Option<HashMap<String, HashMap<String, IndexFieldType>>>,
}
#[derive(Debug, Deserialize, Clone)]
pub struct GetAllSchemasResponse {
pub results: Vec<ParseSchema>,
}