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