1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
use curl::easy::{Easy}; use serde_json::{Value, Result}; use crate::util::config::Config; use crate::http::header::Header; pub struct Engine { pub host: String, pub engine: Easy, } impl Engine { pub fn new() -> Self { let handle = Easy::new(); Engine { host: Config::host(), engine: handle, } } pub fn headers(&mut self) { self.engine.http_headers(Header::get()).unwrap(); } } impl Engine { pub fn get(&mut self, path: &String) -> Result<Value> { self.headers(); self.engine.url(&path).unwrap(); let mut buf = Vec::new(); { let mut transfer = self.engine.transfer(); transfer.write_function(|data| { buf.extend_from_slice(data); Ok(data.len()) }).unwrap(); transfer.perform().unwrap(); } serde_json::from_slice(&buf) } }