Skip to content

Commit 3b012da

Browse files
committed
fix: use offset_of directly, instead of after-the-fact check
1 parent 328fcf5 commit 3b012da

1 file changed

Lines changed: 18 additions & 30 deletions

File tree

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
// Copyright 2025-Present Datadog, Inc. https://www.datadoghq.com/
22
// SPDX-License-Identifier: Apache-2.0
33

4+
use std::mem;
5+
46
/// Fixed-layout span header for direct JS DataView access.
57
///
68
/// JS creates a DataView over each span's header in WASM linear memory and writes fields directly.
@@ -31,36 +33,22 @@ pub struct SpanHeader {
3133

3234
/// Field offsets for JS DataView access.
3335
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);
4651
}
4752

4853
/// 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

Comments
 (0)