firebase-rs 2.0.0

Rust based Firebase library
Documentation
use std::collections::HashMap;
use url::Url;
use crate::{Firebase, UrlParseError};
use crate::constants::{END_AT, EQUAL_TO, EXPORT, FORMAT, LIMIT_TO_FIRST, LIMIT_TO_LAST, ORDER_BY, SHALLOW, START_AT};

pub struct Params {
    pub uri: Url,
    pub params: HashMap<&'static str, String>,
}

impl Params {
    pub fn new(uri: Url) -> Self {
        Self {
            uri,
            params: Default::default(),
        }
    }

    pub fn set_params(&mut self) -> () {
        for (k, v) in self.params.iter() {
            self.uri.set_query(Some(format!("{}={}", k, v).as_str()));
        }
    }

    pub fn add_param<T: ToString>(&mut self, key: &'static str, value: T) -> &mut Self {
        let value = value.to_string();
        self.params.insert(key, value);
        self.set_params();

        self
    }

    pub fn order_by(&mut self, key: &'static str) -> &mut Params {
        self.add_param(ORDER_BY, key)
    }

    pub fn limit_to_first(&mut self, count: u32) -> &mut Params {
        self.add_param(LIMIT_TO_FIRST, count)
    }

    pub fn limit_to_last(&mut self, count: u32) -> &mut Params {
        self.add_param(LIMIT_TO_LAST, count)
    }

    pub fn start_at(&mut self, index: u32) -> &mut Params {
        self.add_param(START_AT, index)
    }

    pub fn end_at(&mut self, index: u32) -> &mut Params {
        self.add_param(END_AT, index)
    }

    pub fn equal_to(&mut self, value: u32) -> &mut Params {
        self.add_param(EQUAL_TO, value)
    }

    pub fn shallow(&mut self, flag: bool) -> &mut Params {
        self.add_param(SHALLOW, flag)
    }

    pub fn format(&mut self) -> &mut Params {
        self.add_param(FORMAT, EXPORT)
    }

    pub fn finish(&self) -> Firebase {
        Firebase::new(self.uri.to_string()).unwrap()
    }
}