StructDef

Struct StructDef 

Source
pub struct StructDef {
    pub name: String,
    pub path: String,
    pub generics: Vec<GenericParam>,
    /* private fields */
}
Expand description

A reflected struct definition with navigation methods.

Provides access to struct metadata and navigation to related types like fields, trait implementations, and methods.

ยงExample

โ“˜
use bronzite_client::Crate;

let krate = Crate::reflect("my_crate")?;
let user = krate.get_struct("User")?;

// Get fields
for field in user.fields()? {
    println!("Field: {} of type {}",
        field.name.unwrap_or_default(),
        field.ty
    );
}

// Check trait implementation
if user.implements("Debug")? {
    println!("User implements Debug");
}

// Get methods
for method in user.methods()? {
    println!("Method: {}", method.name);
}

Fieldsยง

ยงname: String

The structโ€™s name (without path)

ยงpath: String

The structโ€™s full path

ยงgenerics: Vec<GenericParam>

Generic parameters

Implementationsยง

Sourceยง

impl StructDef

Source

pub fn fields(&self) -> Result<Vec<Field>>

Get all fields of this struct.

Returns a vector of Field objects, each representing a field in the struct. Fields include metadata like name, type, visibility, size, and offset.

ยงExample
โ“˜
let user = krate.get_struct("User")?;
for field in user.fields()? {
    println!("Field: {} of type {}",
        field.name.as_deref().unwrap_or("<unnamed>"),
        field.ty
    );
    if let Some(size) = field.size {
        println!("  Size: {} bytes", size);
    }
}
Source

pub fn trait_impls(&self) -> Result<Vec<TraitImpl>>

Get all trait implementations for this struct.

Returns a vector of TraitImpl objects containing information about each trait implementation, including methods, associated types, and source code.

ยงExample
โ“˜
let user = krate.get_struct("User")?;
for impl_block in user.trait_impls()? {
    println!("Implements: {}", impl_block.trait_path);
    for method in impl_block.methods() {
        println!("  - {}", method.name);
    }
}
Source

pub fn implements(&self, trait_path: &str) -> Result<bool>

Check if this struct implements a specific trait.

This is a convenient way to test for trait implementation without fetching all trait impls.

ยงArguments
  • trait_path - The trait path to check (e.g., โ€œDebugโ€, โ€œstd::fmt::Displayโ€)
ยงExample
โ“˜
let user = krate.get_struct("User")?;
if user.implements("Debug")? {
    println!("User can be debug-printed");
}
if user.implements("std::clone::Clone")? {
    println!("User can be cloned");
}
Source

pub fn methods(&self) -> Result<Vec<Method>>

Get inherent methods (from impl StructName { ... } blocks).

Returns methods defined in inherent impl blocks, not trait implementations. Each Method includes the signature, body source, and navigation to parameter/return types.

ยงExample
โ“˜
let user = krate.get_struct("User")?;
for method in user.methods()? {
    println!("Method: {}", method.signature);
    if let Some(body) = &method.body_source {
        println!("  Implementation: {}", body);
    }
    if let Some(ret_type) = method.return_type_def()? {
        println!("  Returns: {}", ret_type.name());
    }
}
Source

pub fn layout(&self) -> Result<LayoutInfo>

Get memory layout information for this struct.

Returns LayoutInfo containing size, alignment, field offsets, and auto-trait implementations (Send, Sync, Copy).

ยงExample
โ“˜
let user = krate.get_struct("User")?;
let layout = user.layout()?;
println!("Size: {} bytes", layout.size);
println!("Alignment: {} bytes", layout.align);
println!("Is Copy: {}", layout.is_copy);
Source

pub fn source(&self) -> Option<&str>

Get the source code of this struct definition.

Source

pub fn details(&self) -> Option<&TypeDetails>

Get detailed type information.

Source

pub fn visibility(&self) -> Option<&Visibility>

Get visibility of this struct.

Source

pub fn docs(&self) -> Option<&str>

Get doc comments.

Trait Implementationsยง

Sourceยง

impl Clone for StructDef

Sourceยง

fn clone(&self) -> StructDef

Returns a duplicate of the value. Read more
1.0.0 ยท Sourceยง

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Sourceยง

impl Debug for StructDef

Sourceยง

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementationsยง

Blanket Implementationsยง

Sourceยง

impl<T> Any for T
where T: 'static + ?Sized,

Sourceยง

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Sourceยง

impl<T> Borrow<T> for T
where T: ?Sized,

Sourceยง

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Sourceยง

impl<T> BorrowMut<T> for T
where T: ?Sized,

Sourceยง

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Sourceยง

impl<T> CloneToUninit for T
where T: Clone,

Sourceยง

unsafe fn clone_to_uninit(&self, dest: *mut u8)

๐Ÿ”ฌThis is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Sourceยง

impl<T> From<T> for T

Sourceยง

fn from(t: T) -> T

Returns the argument unchanged.

Sourceยง

impl<T, U> Into<U> for T
where U: From<T>,

Sourceยง

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Sourceยง

impl<T> ToOwned for T
where T: Clone,

Sourceยง

type Owned = T

The resulting type after obtaining ownership.
Sourceยง

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Sourceยง

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Sourceยง

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Sourceยง

type Error = Infallible

The type returned in the event of a conversion error.
Sourceยง

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Sourceยง

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Sourceยง

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Sourceยง

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.