qdb 0.1.10

Library for interacting with QDB
Documentation
use std::cell::RefCell;
use std::rc::Rc;
use chrono::{DateTime, Utc};
use crate::schema::value::{DatabaseValue, RawValue};

pub type FieldRef = Rc<RefCell<RawField>>;

pub struct RawField {
    pub entity_id: String,
    pub name: String,
    pub value: DatabaseValue,
    pub write_time: DateTime<Utc>,
    pub writer_id: String,
}

impl RawField {
    pub fn entity_id(&self) -> String {
        self.entity_id.clone()
    }

    pub fn name(&self) -> String {
        self.name.clone()
    }

    pub fn value(&self) -> DatabaseValue {
        self.value.clone()
    }

    pub fn write_time(&self) -> DateTime<Utc> {
        self.write_time
    }

    pub fn writer_id(&self) -> String {
        self.writer_id.clone()
    }

    pub fn update_entity_id(&mut self, entity_id: &str) {
        self.entity_id = entity_id.into();
    }

    pub fn update_value(&mut self, value: DatabaseValue) {
        self.value = value;
    }

    pub fn update_write_time(&mut self, write_time: DateTime<Utc>) {
        self.write_time = write_time;
    }

    pub fn update_writer_id(&mut self, writer_id: &str) {
        self.writer_id = writer_id.into();
    }

    pub fn update_name(&mut self, name: &str) {
        self.name = name.into();
    }

    pub fn new(entity_id: impl Into<String>, field: impl Into<String>) -> Self {
        RawField {
            entity_id: entity_id.into(),
            name: field.into(),
            value: DatabaseValue::new(RawValue::Unspecified),
            write_time: Utc::now(),
            writer_id: "".to_string(),
        }
    }

    pub fn new_with_value(
        entity_id: impl Into<String>,
        field: impl Into<String>,
        value: RawValue,
    ) -> Self {
        RawField {
            entity_id: entity_id.into(),
            name: field.into(),
            value: DatabaseValue::new(value),
            write_time: Utc::now(),
            writer_id: "".to_string(),
        }
    }

    pub fn into_field(self) -> Field {
        Field::new(self)
    }
}

pub struct Field(FieldRef);

impl Clone for Field {
    fn clone(&self) -> Self {
        Self(self.0.clone())
    }
}

impl Field {
    pub fn new(field: RawField) -> Self {
        Self(Rc::new(RefCell::new(field)))
    }

    pub fn into_raw(self) -> RawField {
        let field = self.0.borrow();
        RawField {
            entity_id: field.entity_id(),
            name: field.name(),
            value: field.value(),
            write_time: field.write_time(),
            writer_id: field.writer_id(),
        }
    }

    pub fn entity_id(&self) -> String {
        self.0.borrow().entity_id()
    }

    pub fn name(&self) -> String {
        self.0.borrow().name()
    }

    pub fn value(&self) -> DatabaseValue {
        self.0.borrow().value()
    }

    pub fn write_time(&self) -> DateTime<Utc> {
        self.0.borrow().write_time()
    }

    pub fn writer_id(&self) -> String {
        self.0.borrow().writer_id()
    }

    pub fn update_entity_id(&self, entity_id: &str) {
        self.0.borrow_mut().update_entity_id(entity_id);
    }

    pub fn update_value(&self, value: DatabaseValue) {
        self.0.borrow_mut().update_value(value);
    }

    pub fn update_write_time(&self, write_time: DateTime<Utc>) {
        self.0.borrow_mut().update_write_time(write_time);
    }

    pub fn update_writer_id(&self, writer_id: &str) {
        self.0.borrow_mut().update_writer_id(writer_id);
    }

    pub fn update_name(&self, name: &str) {
        self.0.borrow_mut().update_name(name);
    }

    pub fn set_str_value(&self, value: String) -> &Self {
        self.0.borrow_mut().update_value(DatabaseValue::new(RawValue::String(value)));
        self
    }

    pub fn set_i64_value(&self, value: i64) -> &Self {
        self.0.borrow_mut().update_value(DatabaseValue::new(RawValue::Integer(value)));
        self
    }

    pub fn set_f64_value(&self, value: f64) -> &Self {
        self.0.borrow_mut().update_value(DatabaseValue::new(RawValue::Float(value)));
        self
    }

    pub fn set_bool_value(&self, value: bool) -> &Self {
        self.0.borrow_mut().update_value(DatabaseValue::new(RawValue::Boolean(value)));
        self
    }

    pub fn set_entity_reference_value(&self, value: String) -> &Self {
        self.0
            .borrow_mut()
            .update_value(DatabaseValue::new(RawValue::EntityReference(value)));
        self
    }

    pub fn set_timestamp_value(&self, value: DateTime<Utc>) -> &Self {
        self.0
            .borrow_mut()
            .update_value(DatabaseValue::new(RawValue::Timestamp(value)));
        self
    }

    pub fn set_connection_state_value(&self, value: String) -> &Self {
        self.0
            .borrow_mut()
            .update_value(DatabaseValue::new(RawValue::ConnectionState(value)));
        self
    }

    pub fn set_garage_door_state_value(&self, value: String) -> &Self {
        self.0
            .borrow_mut()
            .update_value(DatabaseValue::new(RawValue::GarageDoorState(value)));
        self
    }

    pub fn set_unspecified_value(&self) -> &Self {
        self.0.borrow_mut().update_value(DatabaseValue::new(RawValue::Unspecified));
        self
    }

}