rudy_dwarf/parser/
vec.rs

1//! Vec parser implementation using combinators
2
3use rudy_types::VecLayout;
4
5use crate::Die;
6
7use super::{
8    children::parse_children,
9    primitives::{field_path_offset, is_member_offset, resolved_generic},
10    Parser,
11};
12
13/// Parser for Vec<T> type layout
14pub fn vec() -> impl Parser<VecLayout<Die>> {
15    parse_children((
16        field_path_offset(vec!["buf", "inner", "ptr"]),
17        is_member_offset("len"),
18        field_path_offset(vec!["buf", "inner", "cap", "__0"]),
19        resolved_generic("T"),
20    ))
21    .map(
22        |(data_ptr_offset, length_offset, capacity_offset, inner_type)| VecLayout {
23            data_ptr_offset,
24            length_offset,
25            capacity_offset,
26            inner_type,
27        },
28    )
29    .context("Failed to parse Vec layout")
30}