Skip to main content

checked_layout/
checked_layout.rs

1//! Composes two bounded single-writer regions and their acknowledgement routes.
2
3use native_ipc_core::layout::{
4    AcknowledgementRouteSpec, Endpoint, LayoutLimits, RegionSetLayout, RegionSpec, RoleId,
5};
6
7fn main() -> Result<(), Box<dyn std::error::Error>> {
8    let requests = RoleId::new(1).expect("nonzero role");
9    let responses = RoleId::new(2).expect("nonzero role");
10    let regions = [
11        RegionSpec {
12            role: requests,
13            writer: Endpoint::Initiator,
14            slot_count: 1,
15            payload_bytes: 256,
16            acknowledgement_count: 1,
17        },
18        RegionSpec {
19            role: responses,
20            writer: Endpoint::Responder,
21            slot_count: 1,
22            payload_bytes: 256,
23            acknowledgement_count: 1,
24        },
25    ];
26    let routes = [
27        AcknowledgementRouteSpec {
28            owner: responses,
29            target: requests,
30            slot_index: 0,
31            cell_index: 0,
32        },
33        AcknowledgementRouteSpec {
34            owner: requests,
35            target: responses,
36            slot_index: 0,
37            cell_index: 0,
38        },
39    ];
40    let limits = LayoutLimits {
41        maximum_mapping_size: 64 * 1024,
42        maximum_slot_count: 8,
43        maximum_acknowledgement_count: 8,
44        maximum_payload_bytes: 4096,
45    };
46
47    let topology = RegionSetLayout::calculate([0x52; 32], 1, &regions, &routes, limits)?;
48    for region in topology.regions() {
49        println!(
50            "role={} writer={:?} mapping={} bytes",
51            region.role().get(),
52            region.writer(),
53            region.total_size()
54        );
55    }
56    Ok(())
57}