notion-async-api 0.1.1

A notion client api, in `async` style.
Documentation
use monostate::MustBe;
use serde::{Deserialize, Serialize};

use crate::object::{JsonObject, Object};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct User {
    object: MustBe!("user"),
    id: String,

    pub r#type: Option<UserType>,
    pub name: Option<String>,
    pub avatar_url: Option<String>,
    #[serde(flatten)]
    pub user_data: Option<UserTypeData>,
}

#[derive(Debug, Clone, PartialEq, Eq, Copy, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum UserType {
    Person,
    Bot,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum UserTypeData {
    Person { email: Option<String> },
    Bot { owner: JsonObject },
}

#[derive(Debug, Clone, PartialEq, Eq, Copy, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum OwnerType {
    Workspace,
    User,
}

impl Object for User {
    fn id(&self) -> &str {
        &self.id
    }
    fn object_type(&self) -> crate::object::ObjectType {
        crate::object::ObjectType::User
    }
}