checked_layout/
checked_layout.rs1use 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, ®ions, &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}