use anyhow::{Error}; use sqlx::{Execute, Executor}; use sqlx::postgres::{ PgQueryResult}; use cove_net_common::id::message_type::MessageType; use cove_net_common::id::SnowflakeID; use cove_net_common::id::types::text::TextMessageType; use cove_net_common::message::c2s::text::text::{TextEmbed, TextMessage}; use crate::{CoveDB, CoveDBImpl}; use crate::part::{BindQueryBuilder, SqlPart}; use crate::part::insert::SqlInsert; pub trait TextQueries: CoveDBImpl + Send + Sync { async fn create_message( &self, user_id: SnowflakeID, message: TextMessage, mentions: Option>, mention_everyone: bool, message_type: &TextMessageType ) -> Result { println!("creating message"); let message_id = SnowflakeID::new_random_hex_loc( MessageType::Text(TextMessageType::Text), "beefcafe" )?; let mut query_builder = BindQueryBuilder::new(); SqlInsert::with_table("messages") .col::("id") .col::("channel_id") .col::("guild_id") .col::("author_id") .col::("content") .col::("tts") .col::("mention_everyone") .col::("message_type") .opt_arr_col::("mentions") .opt_arr_col::("embeds") .opt_arr_col::("attachments") .encode(&mut query_builder)?; let query = query_builder.to_query().build() .bind(message_id) .bind(message.channel_id) .bind(message.guild_id) .bind(user_id) .bind(message.content) .bind(message.tts) .bind(mention_everyone) .bind(message_type) .bind(mentions) .bind(message.embeds) .bind(message.attachments); println!("{:?}", query.sql()); let res: PgQueryResult = self.run_query(query).await?; println!("Rows Affected: {}", res.rows_affected()); Ok(res) } } impl TextQueries for CoveDB {}