poot 0.1.1

API wrapper for Photop.
Documentation


use async_trait::async_trait;
use chrono::{serde::ts_seconds, DateTime, Utc};
use serde::{Deserialize};

use super::id::{GroupId, UserId};

#[derive(Deserialize, Debug)]
pub(crate) enum GroupInviteType {
    #[serde(rename = "Anyone")]
    Anyone,

    #[serde(rename = "Self")]
    SelfOnly,
}

#[derive(Deserialize)]
pub(crate) struct RawGroup {
    #[serde(rename = "Icon")]
    icon: String,

    #[serde(rename = "Invite")]
    invite: GroupInviteType,

    #[serde(rename = "Owner")]
    owner: UserId,

    #[serde(with = "ts_seconds", rename = "LastChecked")]
    last_checked: DateTime<Utc>,

    #[serde(with = "ts_seconds", rename = "LastContent")]
    last_content: DateTime<Utc>,
}

impl RawGroup {
    pub(crate) fn into_group(self, id: GroupId) -> Group {
        Group {
            id,
            icon: self.icon,
            invite: self.invite,
            owner: self.owner,
            last_checked: self.last_checked,
            last_content: self.last_content,
        }
    }
}

#[derive(Debug)]
pub struct Group {
    id: GroupId,
    icon: String,
    invite: GroupInviteType,
    owner: UserId,
    last_checked: DateTime<Utc>,
    last_content: DateTime<Utc>,
}

#[async_trait]
trait GroupActions {
    async fn is_owner() -> bool;
    async fn delete() -> Result<(), ()>;
}

#[async_trait]
impl GroupActions for Group {
    async fn is_owner() -> bool {
        todo!()
    }

    async fn delete() -> Result<(), ()> {
        todo!()
    }
}

#[async_trait]
impl GroupActions for GroupId {
    async fn is_owner() -> bool {
        todo!()
    }

    async fn delete() -> Result<(), ()> {
        todo!()
    }
}