|
1 | 1 | // Copyright 2025-Present Datadog, Inc. https://www.datadoghq.com/ |
2 | 2 | // SPDX-License-Identifier: Apache-2.0 |
3 | 3 |
|
| 4 | +use std::mem; |
| 5 | + |
4 | 6 | /// Fixed-layout span header for direct JS DataView access. |
5 | 7 | /// |
6 | 8 | /// JS creates a DataView over each span's header in WASM linear memory and writes fields directly. |
@@ -31,36 +33,22 @@ pub struct SpanHeader { |
31 | 33 |
|
32 | 34 | /// Field offsets for JS DataView access. |
33 | 35 | pub mod offsets { |
34 | | - pub const SPAN_ID: usize = 0; |
35 | | - pub const TRACE_ID_LO: usize = 8; |
36 | | - pub const TRACE_ID_HI: usize = 16; |
37 | | - pub const PARENT_ID: usize = 24; |
38 | | - pub const START: usize = 32; |
39 | | - pub const DURATION: usize = 40; |
40 | | - pub const ERROR: usize = 48; |
41 | | - pub const NAME_ID: usize = 52; |
42 | | - pub const SERVICE_ID: usize = 56; |
43 | | - pub const RESOURCE_ID: usize = 60; |
44 | | - pub const TYPE_ID: usize = 64; |
45 | | - pub const ACTIVE: usize = 68; |
| 36 | + use super::mem; |
| 37 | + use super::SpanHeader; |
| 38 | + |
| 39 | + pub const SPAN_ID: usize = mem::offset_of!(SpanHeader, span_id); |
| 40 | + pub const TRACE_ID_LO: usize = mem::offset_of!(SpanHeader, trace_id_lo); |
| 41 | + pub const TRACE_ID_HI: usize = mem::offset_of!(SpanHeader, trace_id_hi); |
| 42 | + pub const PARENT_ID: usize = mem::offset_of!(SpanHeader, parent_id); |
| 43 | + pub const START: usize = mem::offset_of!(SpanHeader, start); |
| 44 | + pub const DURATION: usize = mem::offset_of!(SpanHeader, duration); |
| 45 | + pub const ERROR: usize = mem::offset_of!(SpanHeader, error); |
| 46 | + pub const NAME_ID: usize = mem::offset_of!(SpanHeader, name_id); |
| 47 | + pub const SERVICE_ID: usize = mem::offset_of!(SpanHeader, service_id); |
| 48 | + pub const RESOURCE_ID: usize = mem::offset_of!(SpanHeader, resource_id); |
| 49 | + pub const TYPE_ID: usize = mem::offset_of!(SpanHeader, type_id); |
| 50 | + pub const ACTIVE: usize = mem::offset_of!(SpanHeader, active); |
46 | 51 | } |
47 | 52 |
|
48 | 53 | /// Size of the header in bytes. Must match the #[repr(C)] layout. |
49 | | -pub const SPAN_HEADER_SIZE: usize = std::mem::size_of::<SpanHeader>(); |
50 | | - |
51 | | -// Compile-time assertions that the struct layout matches the declared offsets and size. |
52 | | -const _: () = { |
53 | | - assert!(SPAN_HEADER_SIZE == 72); |
54 | | - assert!(std::mem::offset_of!(SpanHeader, span_id) == offsets::SPAN_ID); |
55 | | - assert!(std::mem::offset_of!(SpanHeader, trace_id_lo) == offsets::TRACE_ID_LO); |
56 | | - assert!(std::mem::offset_of!(SpanHeader, trace_id_hi) == offsets::TRACE_ID_HI); |
57 | | - assert!(std::mem::offset_of!(SpanHeader, parent_id) == offsets::PARENT_ID); |
58 | | - assert!(std::mem::offset_of!(SpanHeader, start) == offsets::START); |
59 | | - assert!(std::mem::offset_of!(SpanHeader, duration) == offsets::DURATION); |
60 | | - assert!(std::mem::offset_of!(SpanHeader, error) == offsets::ERROR); |
61 | | - assert!(std::mem::offset_of!(SpanHeader, name_id) == offsets::NAME_ID); |
62 | | - assert!(std::mem::offset_of!(SpanHeader, service_id) == offsets::SERVICE_ID); |
63 | | - assert!(std::mem::offset_of!(SpanHeader, resource_id) == offsets::RESOURCE_ID); |
64 | | - assert!(std::mem::offset_of!(SpanHeader, type_id) == offsets::TYPE_ID); |
65 | | - assert!(std::mem::offset_of!(SpanHeader, active) == offsets::ACTIVE); |
66 | | -}; |
| 54 | +pub const SPAN_HEADER_SIZE: usize = mem::size_of::<SpanHeader>(); |
0 commit comments