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 43 44 45 46
use serde_json; use std::collections::HashMap; use error::AuthyError; use client::{Client, Status}; const PREFIX: &'static str = "onetouch"; #[derive(Debug, Clone, Eq, PartialEq, Serialize, Deserialize)] pub struct ApprovalRequest { uuid: String, } pub fn request(client: &Client, id: u32, message: &str, details: Option<&HashMap<&str, String>>, hidden_details: Option<&HashMap<&str, String>>, logos: Option<&HashMap<&str, String>>, seconds_to_expire: Option<u32>) -> Result<(Status, ApprovalRequest), AuthyError> { let mut params: Vec<(String, String)> = vec![]; params.push(("message".into(), message.into())); if let Some(seconds_to_expire) = seconds_to_expire { params.push(("seconds_to_expire".into(), seconds_to_expire.to_string())); } if let Some(details) = details { for (k, v) in details { params.push((format!("details[{}]", k), v.clone())); } } if let Some(hidden_details) = hidden_details { for (k, v) in hidden_details { params.push((format!("hidden_details[{}]", k), v.clone())); } } if let Some(logos) = logos { for (k, v) in logos { params.push(("logos[][res]".into(), k.clone().into())); params.push(("logos[][res]".into(), v.clone())); } } let (status, res) = client.post(PREFIX, &format!("users/{}/approval_requests", id), None, Some(params))?; let approval_request = serde_json::from_value(res["approval_request"].clone())?; Ok((status, approval_request)) }