iab 0.1.0

This library provides strongly-typed structures for OpenRTB, AdCOM, and other specifications published by the Interactive Advertising Bureau (IAB) for the Rust programming language.
Documentation
  • Coverage
  • 99.34%
    454 out of 457 items documented1 out of 40 items with examples
  • Size
  • Source code size: 112.62 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 11.03 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 29s Average build duration of successful builds.
  • all releases: 35s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • klaussilveira/iab-rust
    1 1 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • klaussilveira

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.

Complete

Roadmap

The following specifications are planned for future implementation:

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
);

Contributing

Contributions are welcome! Please feel free to submit issues or pull requests.