use std::future::Future;
use maf_schemas::apps;
use crate::{
app::hooks,
platform::{self, ListenError, SendError},
user::{UserMeta, UserNextMessageError},
};
#[allow(unused)]
pub trait Platform {
type Config;
fn init(config: Self::Config) -> anyhow::Result<Self>
where
Self: Sized;
fn next_user(&self) -> impl Future<Output = Result<platform::RawUser, ListenError>>;
fn next_hook_request(
&self,
) -> impl Future<Output = Result<platform::RawHookRequest, ListenError>>;
fn report_app_schema(&self, schema: &str);
fn set_meta(
&self,
visibility: apps::MetaVisibility,
key: &str,
value: &str,
) -> Option<apps::MetaEntry>;
fn get_meta(&self, key: &str) -> Option<apps::MetaEntry>;
fn delete_meta(&self, key: &str) -> Option<apps::MetaEntry>;
fn list_meta(&self) -> Vec<(String, apps::MetaEntry)>;
}
pub trait PlatformUser {
fn meta(&self) -> UserMeta;
fn send(&self, message: platform::Message) -> Result<(), SendError>;
fn next_message(&self)
-> impl Future<Output = Result<platform::Message, UserNextMessageError>>;
}
pub trait PlatformHookRequest {
fn init(&self) -> Result<hooks::HookRequestInit, hooks::HookRequestError>;
fn respond(&self, body: hooks::HookBody) -> Result<(), platform::SendError>;
}