use super::*;
use crate::utils::CommandSyntax;
use std::fmt::Write;
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiCreateMyAddress {
pub user_id: i64,
}
impl CommandSyntax for ApiCreateMyAddress {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_address ");
write!(buf, "{}", self.user_id).unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiDeleteMyAddress {
pub user_id: i64,
}
impl CommandSyntax for ApiDeleteMyAddress {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_delete_address ");
write!(buf, "{}", self.user_id).unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiShowMyAddress {
pub user_id: i64,
}
impl CommandSyntax for ApiShowMyAddress {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_show_address ");
write!(buf, "{}", self.user_id).unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiSetProfileAddress {
pub user_id: i64,
pub enable: bool,
}
impl CommandSyntax for ApiSetProfileAddress {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_profile_address ");
write!(buf, "{}", self.user_id).unwrap();
buf.push(' ');
if self.enable {
buf.push_str("on");
} else {
buf.push_str("off");
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiSetAddressSettings {
pub user_id: i64,
pub settings: AddressSettings,
}
impl CommandSyntax for ApiSetAddressSettings {
const COMMAND_BUF_SIZE: usize = 1024;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_address_settings ");
write!(buf, "{}", self.user_id).unwrap();
buf.push(' ');
unsafe {
serde_json::to_writer(buf.as_mut_vec(), &self.settings).unwrap();
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiSendMessages {
pub send_ref: ChatRef,
pub live_message: bool,
pub ttl: Option<i32>,
pub composed_messages: Vec<ComposedMessage>,
}
impl CommandSyntax for ApiSendMessages {
const COMMAND_BUF_SIZE: usize = 1024;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_send ");
self.send_ref.append_command_syntax(buf);
if self.live_message {
buf.push(' ');
buf.push_str("live=");
buf.push_str("on");
}
if let Some(ttl) = &self.ttl {
buf.push(' ');
buf.push_str("ttl=");
write!(buf, "{}", ttl).unwrap();
}
buf.push(' ');
buf.push_str("json ");
unsafe {
serde_json::to_writer(buf.as_mut_vec(), &self.composed_messages).unwrap();
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiUpdateChatItem {
pub chat_ref: ChatRef,
pub chat_item_id: i64,
pub live_message: bool,
pub updated_message: UpdatedMessage,
}
impl CommandSyntax for ApiUpdateChatItem {
const COMMAND_BUF_SIZE: usize = 1024;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_update ");
buf.push_str("item ");
self.chat_ref.append_command_syntax(buf);
buf.push(' ');
write!(buf, "{}", self.chat_item_id).unwrap();
if self.live_message {
buf.push(' ');
buf.push_str("live=");
buf.push_str("on");
}
buf.push(' ');
buf.push_str("json ");
unsafe {
serde_json::to_writer(buf.as_mut_vec(), &self.updated_message).unwrap();
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiDeleteChatItem {
pub chat_ref: ChatRef,
pub chat_item_ids: Vec<i64>,
pub delete_mode: CIDeleteMode,
}
impl CommandSyntax for ApiDeleteChatItem {
const COMMAND_BUF_SIZE: usize = 256;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_delete ");
buf.push_str("item ");
self.chat_ref.append_command_syntax(buf);
buf.push(' ');
let mut iter = self.chat_item_ids.iter();
if let Some(el) = iter.next() {
write!(buf, "{el}").unwrap();
}
for el in iter {
buf.push(',');
write!(buf, "{el}").unwrap();
}
buf.push(' ');
match self.delete_mode {
CIDeleteMode::Broadcast => {
buf.push_str("broadcast");
}
CIDeleteMode::Internal => {
buf.push_str("internal");
}
CIDeleteMode::InternalMark => {
buf.push_str("internalMark");
}
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiDeleteMemberChatItem {
pub group_id: i64,
pub chat_item_ids: Vec<i64>,
}
impl CommandSyntax for ApiDeleteMemberChatItem {
const COMMAND_BUF_SIZE: usize = 256;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_delete ");
buf.push_str("member ");
buf.push_str("item ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
buf.push(' ');
let mut iter = self.chat_item_ids.iter();
if let Some(el) = iter.next() {
write!(buf, "{el}").unwrap();
}
for el in iter {
buf.push(',');
write!(buf, "{el}").unwrap();
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiChatItemReaction {
pub chat_ref: ChatRef,
pub chat_item_id: i64,
pub add: bool,
pub reaction: MsgReaction,
}
impl CommandSyntax for ApiChatItemReaction {
const COMMAND_BUF_SIZE: usize = 1024;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_reaction ");
self.chat_ref.append_command_syntax(buf);
buf.push(' ');
write!(buf, "{}", self.chat_item_id).unwrap();
buf.push(' ');
if self.add {
buf.push_str("on");
} else {
buf.push_str("off");
}
buf.push(' ');
unsafe {
serde_json::to_writer(buf.as_mut_vec(), &self.reaction).unwrap();
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ReceiveFile {
pub file_id: i64,
pub user_approved_relays: bool,
pub store_encrypted: Option<bool>,
pub file_inline: Option<bool>,
pub file_path: Option<String>,
}
impl CommandSyntax for ReceiveFile {
const COMMAND_BUF_SIZE: usize = 256;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/freceive ");
write!(buf, "{}", self.file_id).unwrap();
if self.user_approved_relays {
buf.push(' ');
buf.push_str("approved_relays=");
buf.push_str("on");
}
if let Some(store_encrypted) = &self.store_encrypted {
buf.push(' ');
buf.push_str("encrypt=");
if *store_encrypted {
buf.push_str("on");
} else {
buf.push_str("off");
}
}
if let Some(file_inline) = &self.file_inline {
buf.push(' ');
buf.push_str("inline=");
if *file_inline {
buf.push_str("on");
} else {
buf.push_str("off");
}
}
if let Some(file_path) = &self.file_path {
buf.push(' ');
write!(buf, "{}", file_path).unwrap();
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct CancelFile {
pub file_id: i64,
}
impl CommandSyntax for CancelFile {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/fcancel ");
write!(buf, "{}", self.file_id).unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiAddMember {
pub group_id: i64,
pub contact_id: i64,
pub member_role: GroupMemberRole,
}
impl CommandSyntax for ApiAddMember {
const COMMAND_BUF_SIZE: usize = 256;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_add ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
buf.push(' ');
write!(buf, "{}", self.contact_id).unwrap();
buf.push(' ');
match self.member_role {
GroupMemberRole::Observer => {
buf.push_str("observer");
}
GroupMemberRole::Author => {
buf.push_str("author");
}
GroupMemberRole::Member => {
buf.push_str("member");
}
GroupMemberRole::Moderator => {
buf.push_str("moderator");
}
GroupMemberRole::Admin => {
buf.push_str("admin");
}
GroupMemberRole::Owner => {
buf.push_str("owner");
}
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiJoinGroup {
pub group_id: i64,
}
impl CommandSyntax for ApiJoinGroup {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_join ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiAcceptMember {
pub group_id: i64,
pub group_member_id: i64,
pub member_role: GroupMemberRole,
}
impl CommandSyntax for ApiAcceptMember {
const COMMAND_BUF_SIZE: usize = 256;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_accept ");
buf.push_str("member ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
buf.push(' ');
write!(buf, "{}", self.group_member_id).unwrap();
buf.push(' ');
match self.member_role {
GroupMemberRole::Observer => {
buf.push_str("observer");
}
GroupMemberRole::Author => {
buf.push_str("author");
}
GroupMemberRole::Member => {
buf.push_str("member");
}
GroupMemberRole::Moderator => {
buf.push_str("moderator");
}
GroupMemberRole::Admin => {
buf.push_str("admin");
}
GroupMemberRole::Owner => {
buf.push_str("owner");
}
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiMembersRole {
pub group_id: i64,
pub group_member_ids: Vec<i64>,
pub member_role: GroupMemberRole,
}
impl CommandSyntax for ApiMembersRole {
const COMMAND_BUF_SIZE: usize = 256;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_member ");
buf.push_str("role ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
buf.push(' ');
let mut iter = self.group_member_ids.iter();
if let Some(el) = iter.next() {
write!(buf, "{el}").unwrap();
}
for el in iter {
buf.push(',');
write!(buf, "{el}").unwrap();
}
buf.push(' ');
match self.member_role {
GroupMemberRole::Observer => {
buf.push_str("observer");
}
GroupMemberRole::Author => {
buf.push_str("author");
}
GroupMemberRole::Member => {
buf.push_str("member");
}
GroupMemberRole::Moderator => {
buf.push_str("moderator");
}
GroupMemberRole::Admin => {
buf.push_str("admin");
}
GroupMemberRole::Owner => {
buf.push_str("owner");
}
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiBlockMembersForAll {
pub group_id: i64,
pub group_member_ids: Vec<i64>,
pub blocked: bool,
}
impl CommandSyntax for ApiBlockMembersForAll {
const COMMAND_BUF_SIZE: usize = 256;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_block ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
buf.push(' ');
let mut iter = self.group_member_ids.iter();
if let Some(el) = iter.next() {
write!(buf, "{el}").unwrap();
}
for el in iter {
buf.push(',');
write!(buf, "{el}").unwrap();
}
buf.push(' ');
buf.push_str("blocked=");
if self.blocked {
buf.push_str("on");
} else {
buf.push_str("off");
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiRemoveMembers {
pub group_id: i64,
pub group_member_ids: Vec<i64>,
pub with_messages: bool,
}
impl CommandSyntax for ApiRemoveMembers {
const COMMAND_BUF_SIZE: usize = 256;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_remove ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
buf.push(' ');
let mut iter = self.group_member_ids.iter();
if let Some(el) = iter.next() {
write!(buf, "{el}").unwrap();
}
for el in iter {
buf.push(',');
write!(buf, "{el}").unwrap();
}
if self.with_messages {
buf.push(' ');
buf.push_str("messages=");
buf.push_str("on");
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiLeaveGroup {
pub group_id: i64,
}
impl CommandSyntax for ApiLeaveGroup {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_leave ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiListMembers {
pub group_id: i64,
}
impl CommandSyntax for ApiListMembers {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_members ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiNewGroup {
pub user_id: i64,
pub incognito: bool,
pub group_profile: GroupProfile,
}
impl CommandSyntax for ApiNewGroup {
const COMMAND_BUF_SIZE: usize = 1024;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_group ");
write!(buf, "{}", self.user_id).unwrap();
if self.incognito {
buf.push(' ');
buf.push_str("incognito=");
buf.push_str("on");
}
buf.push(' ');
unsafe {
serde_json::to_writer(buf.as_mut_vec(), &self.group_profile).unwrap();
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiUpdateGroupProfile {
pub group_id: i64,
pub group_profile: GroupProfile,
}
impl CommandSyntax for ApiUpdateGroupProfile {
const COMMAND_BUF_SIZE: usize = 1024;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_group_profile ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
buf.push(' ');
unsafe {
serde_json::to_writer(buf.as_mut_vec(), &self.group_profile).unwrap();
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiCreateGroupLink {
pub group_id: i64,
pub member_role: GroupMemberRole,
}
impl CommandSyntax for ApiCreateGroupLink {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_create ");
buf.push_str("link ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
buf.push(' ');
match self.member_role {
GroupMemberRole::Observer => {
buf.push_str("observer");
}
GroupMemberRole::Author => {
buf.push_str("author");
}
GroupMemberRole::Member => {
buf.push_str("member");
}
GroupMemberRole::Moderator => {
buf.push_str("moderator");
}
GroupMemberRole::Admin => {
buf.push_str("admin");
}
GroupMemberRole::Owner => {
buf.push_str("owner");
}
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiGroupLinkMemberRole {
pub group_id: i64,
pub member_role: GroupMemberRole,
}
impl CommandSyntax for ApiGroupLinkMemberRole {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_set ");
buf.push_str("link ");
buf.push_str("role ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
buf.push(' ');
match self.member_role {
GroupMemberRole::Observer => {
buf.push_str("observer");
}
GroupMemberRole::Author => {
buf.push_str("author");
}
GroupMemberRole::Member => {
buf.push_str("member");
}
GroupMemberRole::Moderator => {
buf.push_str("moderator");
}
GroupMemberRole::Admin => {
buf.push_str("admin");
}
GroupMemberRole::Owner => {
buf.push_str("owner");
}
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiDeleteGroupLink {
pub group_id: i64,
}
impl CommandSyntax for ApiDeleteGroupLink {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_delete ");
buf.push_str("link ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiGetGroupLink {
pub group_id: i64,
}
impl CommandSyntax for ApiGetGroupLink {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_get ");
buf.push_str("link ");
buf.push('#');
write!(buf, "{}", self.group_id).unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiAddContact {
pub user_id: i64,
pub incognito: bool,
}
impl CommandSyntax for ApiAddContact {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_connect ");
write!(buf, "{}", self.user_id).unwrap();
if self.incognito {
buf.push(' ');
buf.push_str("incognito=");
buf.push_str("on");
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiConnectPlan {
pub user_id: i64,
pub connection_link: Option<String>,
}
impl CommandSyntax for ApiConnectPlan {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_connect ");
buf.push_str("plan ");
write!(buf, "{}", self.user_id).unwrap();
buf.push(' ');
write!(
buf,
"{}",
self.connection_link.as_deref().unwrap_or_default()
)
.unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiConnect {
pub user_id: i64,
pub incognito: bool,
pub prepared_link: Option<CreatedConnLink>,
}
impl CommandSyntax for ApiConnect {
const COMMAND_BUF_SIZE: usize = 256;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_connect ");
write!(buf, "{}", self.user_id).unwrap();
if let Some(prepared_link) = &self.prepared_link {
buf.push(' ');
prepared_link.append_command_syntax(buf);
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct Connect {
pub incognito: bool,
pub conn_link: Option<String>,
}
impl CommandSyntax for Connect {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/connect");
if let Some(conn_link) = &self.conn_link {
buf.push(' ');
write!(buf, "{}", conn_link).unwrap();
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiAcceptContact {
pub contact_req_id: i64,
}
impl CommandSyntax for ApiAcceptContact {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_accept ");
write!(buf, "{}", self.contact_req_id).unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiRejectContact {
pub contact_req_id: i64,
}
impl CommandSyntax for ApiRejectContact {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_reject ");
write!(buf, "{}", self.contact_req_id).unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiListContacts {
pub user_id: i64,
}
impl CommandSyntax for ApiListContacts {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_contacts ");
write!(buf, "{}", self.user_id).unwrap();
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiListGroups {
pub user_id: i64,
pub contact_id: Option<i64>,
pub search: Option<String>,
}
impl CommandSyntax for ApiListGroups {
const COMMAND_BUF_SIZE: usize = 256;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_groups ");
write!(buf, "{}", self.user_id).unwrap();
if let Some(contact_id) = &self.contact_id {
buf.push(' ');
buf.push('@');
write!(buf, "{}", contact_id).unwrap();
}
if let Some(search) = &self.search {
buf.push(' ');
write!(buf, "{}", search).unwrap();
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiDeleteChat {
pub chat_ref: ChatRef,
pub chat_delete_mode: ChatDeleteMode,
}
impl CommandSyntax for ApiDeleteChat {
const COMMAND_BUF_SIZE: usize = 64;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_delete ");
self.chat_ref.append_command_syntax(buf);
buf.push(' ');
self.chat_delete_mode.append_command_syntax(buf);
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ShowActiveUser {}
impl CommandSyntax for ShowActiveUser {
const COMMAND_BUF_SIZE: usize = 0;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/user");
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct CreateActiveUser {
pub new_user: NewUser,
}
impl CommandSyntax for CreateActiveUser {
const COMMAND_BUF_SIZE: usize = 1024;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_create ");
buf.push_str("user ");
unsafe {
serde_json::to_writer(buf.as_mut_vec(), &self.new_user).unwrap();
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ListUsers {}
impl CommandSyntax for ListUsers {
const COMMAND_BUF_SIZE: usize = 0;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/users");
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiSetActiveUser {
pub user_id: i64,
pub view_pwd: Option<String>,
}
impl CommandSyntax for ApiSetActiveUser {
const COMMAND_BUF_SIZE: usize = 1024;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_user ");
write!(buf, "{}", self.user_id).unwrap();
if let Some(view_pwd) = &self.view_pwd {
buf.push(' ');
unsafe {
serde_json::to_writer(buf.as_mut_vec(), &view_pwd).unwrap();
}
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiDeleteUser {
pub user_id: i64,
pub del_smp_queues: bool,
pub view_pwd: Option<String>,
}
impl CommandSyntax for ApiDeleteUser {
const COMMAND_BUF_SIZE: usize = 1024;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_delete ");
buf.push_str("user ");
write!(buf, "{}", self.user_id).unwrap();
buf.push(' ');
buf.push_str("del_smp=");
if self.del_smp_queues {
buf.push_str("on");
} else {
buf.push_str("off");
}
if let Some(view_pwd) = &self.view_pwd {
buf.push(' ');
unsafe {
serde_json::to_writer(buf.as_mut_vec(), &view_pwd).unwrap();
}
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiUpdateProfile {
pub user_id: i64,
pub profile: Profile,
}
impl CommandSyntax for ApiUpdateProfile {
const COMMAND_BUF_SIZE: usize = 1024;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_profile ");
write!(buf, "{}", self.user_id).unwrap();
buf.push(' ');
unsafe {
serde_json::to_writer(buf.as_mut_vec(), &self.profile).unwrap();
}
}
}
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "bon", derive(::bon::Builder))]
pub struct ApiSetContactPrefs {
pub contact_id: i64,
pub preferences: Preferences,
}
impl CommandSyntax for ApiSetContactPrefs {
const COMMAND_BUF_SIZE: usize = 1024;
fn append_command_syntax(&self, buf: &mut String) {
buf.push_str("/_set ");
buf.push_str("prefs ");
buf.push('@');
write!(buf, "{}", self.contact_id).unwrap();
buf.push(' ');
unsafe {
serde_json::to_writer(buf.as_mut_vec(), &self.preferences).unwrap();
}
}
}