cloudevents/binding/http/
mod.rs1pub mod builder;
2pub mod deserializer;
3mod headers;
4
5use crate::{
6 message::{Error, MessageDeserializer},
7 Event,
8};
9use deserializer::Deserializer;
10pub use headers::Headers;
11mod serializer;
12
13pub use builder::Builder;
14use core::convert::TryFrom;
15use http::Response;
16
17use http;
18pub use serializer::Serializer;
19use std::convert::TryInto;
20use std::fmt::Debug;
21
22pub static SPEC_VERSION_HEADER: &str = "ce-specversion";
23
24pub fn to_event<'a, T: Headers<'a>>(
26 headers: &'a T,
27 body: Vec<u8>,
28) -> std::result::Result<Event, Error> {
29 MessageDeserializer::into_event(Deserializer::new(headers, body))
30}
31
32pub fn header_prefix(name: &str) -> String {
33 super::header_prefix("ce-", name)
34}
35
36impl<T> TryFrom<Response<T>> for Event
37where
38 T: TryInto<Vec<u8>>,
39 <T as TryInto<Vec<u8>>>::Error: Debug,
40{
41 type Error = crate::message::Error;
42
43 fn try_from(response: Response<T>) -> Result<Self, Self::Error> {
44 let headers = response.headers().to_owned();
45 let body = T::try_into(response.into_body()).unwrap();
46
47 to_event(&headers, body)
48 }
49}
50
51#[cfg(test)]
52mod tests {
53 use crate::test::fixtures;
54 use crate::Event;
55 use core::convert::TryFrom;
56 use http::Response;
57
58 use http;
59
60 #[test]
61 fn test_response_to_event() {
62 let event = fixtures::v10::minimal_string_extension();
63
64 let response = Response::builder()
65 .header("ce-id", fixtures::id())
66 .header("ce-source", fixtures::source())
67 .header("ce-type", fixtures::ty())
68 .header("ce-specversion", "1.0")
69 .header("ce-someint", "10")
70 .body(Vec::new())
71 .unwrap();
72
73 assert_eq!(event, Event::try_from(response).unwrap());
74 }
75}