bravia_api 0.1.0

Sony Bravia API wrapper
Documentation
use wiremock::{MockServer, Mock, matchers::{method, path, body_string_contains, BodyExactMatcher}, ResponseTemplate};
use std::fs::File;
use std::io::BufReader;
use serde_json::Value;

pub async fn server_setup(json_base_path: &str) -> MockServer {
    let file = File::open(format!("{}/supported_api_info.json", json_base_path)).unwrap();
    let reader = BufReader::new(file);
    let json: Value = serde_json::from_reader(reader).unwrap();
    let template = ResponseTemplate::new(200).set_body_json(json);
    let mock_server = MockServer::start().await;
    Mock::given(method("POST"))
        .and(path("/sony/guide"))
        .and(body_string_contains("getSupportedApiInfo"))
        .respond_with(template)
        .named("getSupportedApiInfo POST")
        .mount(&mock_server)
        .await;
   mock_server 
}

pub trait FromFile {
    fn from_json_file(json_path: &str) -> Self;
}

impl FromFile for ResponseTemplate {
    fn from_json_file(json_path: &str) -> Self {
        let file = File::open(json_path).unwrap();
        let reader = BufReader::new(file);
        let json: Value = serde_json::from_reader(reader).unwrap();
        ResponseTemplate::new(200).set_body_json(json)    
    }
}

impl FromFile for BodyExactMatcher {
    fn from_json_file(json_path: &str) -> Self {
        let file = File::open(json_path).unwrap();
        let reader = BufReader::new(file);
        let json: Value = serde_json::from_reader(reader).unwrap();
        Self::json(json)
    }
}