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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//! # IAB Rust
//!
//! This library provides strongly-typed structures for `OpenRTB`, `AdCOM`, and
//! other specifications published by the Interactive Advertising Bureau (IAB)
//! for the Rust programming language.
//!
//! The primary goal is to define these types in an idiomatic Rust way,
//! adhering strictly to the official specifications. This allows for easier
//! integration and validation of OpenRTB-based protocols within Rust applications.
//!
//! # Creating a Bid Request
//!
//! Below is an example of creating a bid request:
//!
//! ```
//! use iab::openrtb2::*;
//! use serde_json;
//!
//! let request = BidRequest {
//! id: "80ce30c53c16e6ede735f123ef6e32361bfc7b22".to_string(),
//! at: Some(1),
//! cur: Some(vec!["USD".to_string()]),
//! imp: vec![Imp {
//! id: "1".to_string(),
//! bidfloor: Some(0.03),
//! banner: Some(Banner {
//! h: Some(250),
//! w: Some(300),
//! pos: Some(0),
//! ..Default::default()
//! }),
//! ..Default::default()
//! }],
//! site: Some(Site {
//! id: Some("102855".to_string()),
//! cat: Some(vec!["IAB3-1".to_string()]),
//! domain: Some("www.foobar.com".to_string()),
//! page: Some("http://www.foobar.com/1234.html".to_string()),
//! publisher: Some(Publisher {
//! id: Some("8953".to_string()),
//! name: Some("foobar.com".to_string()),
//! cat: Some(vec!["IAB3-1".to_string()]),
//! domain: Some("foobar.com".to_string()),
//! ..Default::default()
//! }),
//! ..Default::default()
//! }),
//! user: Some(User {
//! id: Some("55816b39711f9b5acf3b90e313ed29e51665623f".to_string()),
//! ..Default::default()
//! }),
//! ..Default::default()
//! };
//!
//! let output = serde_json::to_string_pretty(&request).expect("Failed to serialize BidRequest");
//! ```
//!
//! # Parsing a Bid Request
//!
//! Below is an example of parsing a bid request:
//!
//! ```
//! use iab::openrtb2::*;
//! use serde_json::{Result};
//!
//! let data = r#"
//! {
//! "id": "80ce30c53c16e6ede735f123ef6e32361bfc7b22",
//! "at": 1,
//! "cur": ["USD"],
//! "imp": [
//! { "id": "1", "bidfloor": 0.03, "banner": {"h": 250, "w": 300, "pos": 0} }
//! ],
//! "site": {
//! "id": "102855",
//! "cat": ["IAB3-1"],
//! "domain": "www.foobar.com",
//! "page": "http://www.foobar.com/1234.html",
//! "publisher": {
//! "id": "8953",
//! "name": "foobar.com",
//! "cat": ["IAB3-1"],
//! "domain": "foobar.com"
//! }
//! },
//! "user": {"id": "55816b39711f9b5acf3b90e313ed29e51665623f"}
//! }"#;
//!
//! // Parse the Bid Request JSON
//! let br: BidRequest = serde_json::from_str(data).unwrap();
//!
//! // Do things just like with any other Rust data structure
//! println!(
//! "Bid Request {}, with impression {} on {:?}",
//! br.id,
//! br.imp[0].id,
//! br.site.unwrap().domain
//! );
//! ```