Skip to main content

CustomDebugInformationBuilder

Struct CustomDebugInformationBuilder 

pub struct CustomDebugInformationBuilder { /* private fields */ }
Expand description

Builder for constructing CustomDebugInformation table entries

Provides a fluent interface for building CustomDebugInformation metadata table entries. These entries store custom debugging information that extends beyond the standard Portable PDB tables, allowing compilers and tools to embed specialized debugging metadata.

§Required Fields

  • parent: HasCustomDebugInformation coded index to the metadata element
  • kind: GUID heap index identifying the type of custom debug information
  • value: Raw debug information blob data

§Custom Debug Information Types

Common Kind GUIDs include:

  • State Machine Hoisted Local Scopes
  • Dynamic Local Variables
  • Default Namespace (VB)
  • Edit and Continue Local Slot Map
  • Edit and Continue Lambda and Closure Map
  • Embedded Source
  • Source Link

§Examples

use dotscope::prelude::*;

// Source link debug information for a method
let method_parent = CodedIndex::new(TableId::MethodDef, 5, CodedIndexType::HasCustomDebugInformation);
let source_link = CustomDebugInformationBuilder::new()
    .parent(method_parent)
    .kind(1)  // GUID heap index for Source Link type
    .value(b"{\"documents\": {\"*\": \"https://github.com/...\"}}")
    .build(&mut assembly)?;

// Embedded source for a document
let document_parent = CodedIndex::new(TableId::Document, 2, CodedIndexType::HasCustomDebugInformation);
let embedded_source = CustomDebugInformationBuilder::new()
    .parent(document_parent)
    .kind(2)  // GUID heap index for Embedded Source type
    .value(&source_bytes)
    .build(&mut assembly)?;

Implementations§

§

impl CustomDebugInformationBuilder

pub fn new() -> Self

Creates a new CustomDebugInformationBuilder with default values

Initializes a new builder instance with all fields unset. The caller must provide all required fields before calling build().

§Returns

A new CustomDebugInformationBuilder instance ready for configuration

§Examples
use dotscope::prelude::*;

let builder = CustomDebugInformationBuilder::new();

pub fn parent(self, parent: CodedIndex) -> Self

Sets the parent metadata element

Specifies the metadata element that this custom debug information is associated with using a HasCustomDebugInformation coded index.

§Parameters
  • parent: HasCustomDebugInformation coded index to the target element
§Returns

Self for method chaining

§Valid Parent Types
  • MethodDef, Field, TypeRef, TypeDef, Param, InterfaceImpl, MemberRef, Module
  • DeclSecurity, Property, Event, StandAloneSig, ModuleRef, TypeSpec, Assembly
  • AssemblyRef, File, ExportedType, ManifestResource, GenericParam, GenericParamConstraint
  • MethodSpec, Document, LocalScope, LocalVariable, LocalConstant, ImportScope
§Examples
use dotscope::prelude::*;

// Debug info for a method
let method_parent = CodedIndex::new(TableId::MethodDef, 1, CodedIndexType::HasCustomDebugInformation);
let builder = CustomDebugInformationBuilder::new()
    .parent(method_parent);

// Debug info for a document
let document_parent = CodedIndex::new(TableId::Document, 3, CodedIndexType::HasCustomDebugInformation);
let builder = CustomDebugInformationBuilder::new()
    .parent(document_parent);

pub fn kind(self, kind: u32) -> Self

Sets the debug information type GUID index

Specifies the GUID heap index that identifies the specific type of custom debug information, which determines how to interpret the value blob.

§Parameters
  • kind: GUID heap index for the debug information type
§Returns

Self for method chaining

§Examples
use dotscope::prelude::*;

let builder = CustomDebugInformationBuilder::new()
    .kind(1);  // Points to Source Link GUID in heap

pub fn value(self, value: &[u8]) -> Self

Sets the debug information value blob

Specifies the raw blob data containing the custom debug information. The format of this data is determined by the Kind GUID.

§Parameters
  • value: Raw debug information blob data
§Returns

Self for method chaining

§Examples
use dotscope::prelude::*;

// JSON data for Source Link
let json_data = b"{\"documents\": {\"*\": \"https://github.com/...\"}}";
let builder = CustomDebugInformationBuilder::new()
    .value(json_data);

// Binary data for custom debug info
let binary_data = vec![0x01, 0x02, 0x03, 0x04];
let builder = CustomDebugInformationBuilder::new()
    .value(&binary_data);

// Empty value for some debug info types
let builder = CustomDebugInformationBuilder::new()
    .value(&[]);

pub fn build(self, assembly: &mut CilAssembly) -> Result<ChangeRefRc>

Builds and adds the CustomDebugInformation entry to the metadata

Validates all required fields, creates the CustomDebugInformation table entry, and adds it to the CilAssembly. Returns a token that can be used to reference this custom debug information.

§Parameters
  • assembly: Mutable reference to the CilAssembly
§Returns
  • Ok(Token): Token referencing the created custom debug information
  • Err(Error): If validation fails or table operations fail
§Errors
  • Missing required field (parent, kind, or value)
  • Invalid coded index for parent
  • Table operations fail due to metadata constraints
§Examples
use dotscope::prelude::*;

let mut assembly = CilAssembly::new(view);
let parent = CodedIndex::new(TableId::MethodDef, 1, CodedIndexType::HasCustomDebugInformation);
let debug_data = vec![0x01, 0x02, 0x03];
let token = CustomDebugInformationBuilder::new()
    .parent(parent)
    .kind(42)
    .value(&debug_data)
    .build(&mut assembly)?;

Trait Implementations§

§

impl Clone for CustomDebugInformationBuilder

§

fn clone(&self) -> CustomDebugInformationBuilder

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
§

impl Debug for CustomDebugInformationBuilder

§

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

Formats the value using the given formatter. Read more
§

impl Default for CustomDebugInformationBuilder

§

fn default() -> Self

Creates a default CustomDebugInformationBuilder

Equivalent to calling CustomDebugInformationBuilder::new().

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> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Source§

fn type_name(&self) -> &'static str

Gets the type name of self
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> Downcast for T
where T: AsAny + ?Sized,

Source§

fn is<T>(&self) -> bool
where T: AsAny,

Returns true if the boxed type is the same as T. Read more
Source§

fn downcast_ref<T>(&self) -> Option<&T>
where T: AsAny,

Forward to the method defined on the type Any.
Source§

fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: AsAny,

Forward to the method defined on the type Any.
Source§

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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, A> IntoAst<A> for T
where T: Into<A>, A: Ast,

Source§

fn into_ast(self, _a: &A) -> A

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
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> TryClone for T
where T: Clone,

Source§

fn try_clone(&self) -> Result<T, Error>

Clones self, possibly returning an error.
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more