Function detached_jws::decode::deserialize_selector [−][src]
pub fn deserialize_selector<F>(
jws: &impl AsRef<[u8]>,
payload: &mut impl Read,
selector: F
) -> Result<Map<String, Value>> where
F: Fn(&Map<String, Value>) -> Option<Box<dyn Verify>>,
Deserialize and verify detached jws
Examples
extern crate detached_jws; extern crate anyhow; extern crate serde_json; use std::io::{Write}; use anyhow::Result; use serde_json::{Map, Value}; use detached_jws::{Verify}; #[derive(Default)] pub struct DummyVerifier; impl Verify for DummyVerifier { fn verify(&self, signature: &[u8]) -> Result<bool> { Ok(true) } } impl Write for DummyVerifier { fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> { Ok(buf.len()) } fn flush(&mut self) -> std::io::Result<()> { Ok(()) } } let detached_jws = "eyJhbGciOiJ0ZXN0X2FsZ29yaXRobSIsImN1c3RvbSI6ImN1c3RvbV92YWx1ZSJ9..ZXlKaGJHY2lPaUowWlhOMFgyRnNaMjl5YVhSb2JTSXNJbU4xYzNSdmJTSTZJbU4xYzNSdmJWOTJZV3gxWlNKOS5BQUVDQXdRRkJn".as_bytes(); let verified_headers = detached_jws::deserialize_selector( &detached_jws, &mut vec![0, 1, 2, 3, 4, 5, 6].as_slice(), |h| { match h.get("alg").unwrap() { Value::String(ref v) if v == "test_algorithm" => Some(Box::new(DummyVerifier::default())), _ => None, } }).unwrap(); assert_eq!( verified_headers.get("custom").unwrap().as_str().unwrap(), "custom_value" );