use serde::{Deserialize, Serialize};
use async_trait::async_trait;
use anyhow::Result;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct WpSetting {
pub res_w: Option<u32>,
pub mkt: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct SshLocalPortMapping {
pub jump_host: String,
pub jump_host_user: Option<String>,
pub jump_host_port: Option<u32>,
pub jump_host_pwd: Option<String>,
pub target_host_user: Option<String>,
pub target_host_pwd: Option<String>,
pub target_host_port: Option<u32>,
pub auto_reconnect: Option<bool>,
pub local_port: u32,
pub target_host: String,
pub auto_connect: Option<bool>,
pub same_pwd: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct SshpmSetting {
pub lpmappings: Option<Vec<SshLocalPortMapping>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct FeatureSettings {
pub wp: WpSetting,
pub sshpm: SshpmSetting,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Feature {
pub status: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Features {
pub wp: Feature,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Config {
pub detect_lidchange: Option<bool>,
pub features: Features,
pub run_at_start_up: Option<bool>,
pub settings: FeatureSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ToggleFeatureRequest {
pub feature: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ToggleFeatureResponse {
pub status: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct UpdateConfigRequest {
pub config: Config,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct UpdateConfigResponse {
pub config: Config,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct GetConfigResponse {
pub config: Config,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct GetFeaturesResponse {
pub features: Features,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct GetFeatureStatusRequest {
pub feature: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct GetFeatureStatusResponse {
pub status: bool,
}
#[async_trait]
pub trait FeatureUsecase {
async fn toggle_feature(&self, request: ToggleFeatureRequest) -> Result<ToggleFeatureResponse>;
async fn update_config(&self, request: UpdateConfigRequest) -> Result<UpdateConfigResponse>;
async fn get_config(&self) -> Result<GetConfigResponse>;
async fn get_features(&self) -> Result<GetFeaturesResponse>;
async fn get_feature_status(&self, request: GetFeatureStatusRequest) -> Result<GetFeatureStatusResponse>;
}
#[async_trait]
pub trait SshpmUsecase {
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct GetWallpaperRequest {
pub mkt: String,
pub res_w: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct GetWallpaperResponse {
pub id: String,
pub data: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct SetWallpaperRequest {
pub id: String,
}
#[async_trait]
pub trait WallpaperUsecase {
async fn get_wallpaper(&self, request: GetWallpaperRequest) -> Result<GetWallpaperResponse>;
async fn set_wallpaper(&self, request: SetWallpaperRequest) -> Result<()>;
}