boomack 0.4.1

Client library for Boomack
Documentation
//! Structures and functions to create
//! [`ClientRequest`](../api/struct.ClientRequest.html) instances
//! for making evaluation requests

use std::path::PathBuf;
use super::json::*;
use super::api::*;

/// Evaluation parameters contain all required information
/// for the evaluation request, except the JavaScript code.
pub struct EvalParameters<'l> {
    /// Target panel ID
    pub panel: Option<&'l str>,
}

fn init_eval_request_body(p: &EvalParameters) -> JsonMap
{
    let mut req = JsonMap::new();
    if let Some(panel_id) = p.panel {
        set_json_str_value(&mut req, "panel", panel_id);
    }
    req
}

fn build_eval_json_request(body: JsonMap) -> ClientRequest {
    let mut req = ClientRequest::post(format!("eval"));
    req.set_json_body(body);
    req
}

/// Create an evaluation request with the JavaScript code in a string.
pub fn eval_text_request(p: EvalParameters, text: &str)
    -> ClientRequest
{
    let mut body = init_eval_request_body(&p);
    set_json_str_value(&mut body, "script", text);
    build_eval_json_request(body)
}

fn build_stream_eval_request(p: EvalParameters) -> ClientRequest
{
    let mut req = ClientRequest::post(format!("panels/{}/eval",
        p.panel.unwrap_or("default")));
    req.set_header("Content-Type", "application/javascript");
    req
}

/// Create an evaluation request with the JavaScript code in a file.
pub fn eval_file_request(p: EvalParameters, filename: &str)
    -> ClientRequest
{
    let mut req = build_stream_eval_request(p);
    req.set_file_body(PathBuf::from(filename));
    req
}

/// Create an evaluation request with the JavaScript code read from STDIN.
pub fn eval_stdin_request(p: EvalParameters)
    -> ClientRequest
{
    let mut req = build_stream_eval_request(p);
    req.set_stdin_body();
    req
}