joker_query 1.0.0

The joker_query is most sugared query builder of Rust
Documentation
use std::fmt::Display;

use super::{value::Value, where_by::{WhereInfo, CondSep}, where_cond::{WhereCond, WhereOwner}, operator::Op, set::Pair};


pub struct Update<'a> {
    table: &'a str,
    kv: Vec<(&'a str, Value<'a>)>,
    whereas: Vec<WhereInfo<'a>>,
}


impl<'a> WhereOwner<'a> for Update<'a> {
    fn set_seperator(&mut self, index: usize, sep: CondSep) {
        self.whereas[index].seperator = Some(sep);
    }

    fn push(&mut self, where_info: WhereInfo<'a>) {
        self.whereas.push(where_info);
    }

    fn len(&self) -> usize {
        self.whereas.len()
    }
}


impl<'a> Display for Update<'a> {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        let _ = write!(f, "UPDATE {}\nSET ", self.table);
        let len = self.kv.len() - 1;
        for (index, (field, value)) in self.kv.iter().enumerate() {
            let _ = write!(f, "{} = {}", field, value);
            if index < len {
                let _ = write!(f, ", ");
            }
        }
        if self.whereas.len() > 0 {
            let _ = write!(f, "\nWHERE");
            self.whereas.iter().for_each(|c| {
                let _ = write!(f, "{}", c);
            });
        }
        return Ok(())
    }
}

impl<'a> Update<'a> {    
    pub fn table(table: &'a str) -> Update {
        Update { 
            table, 
            kv: vec![],
            whereas: vec![]
        }
    }

    pub fn set(mut self, field_value: Vec<Pair<'a>>) -> Self {
        for pair in field_value {
           self.kv.push((pair.field, pair.value)) 
        }
        return self
    }

    pub fn where_by(self, left: &'a str, op: Op<'a>) -> WhereCond<Self> {
        WhereCond::new(self, left, op)
    }

    pub fn build(&self) -> String {
        format!("{}", self)
    }
}