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 context)?;

// 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 context)?;

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, context: &mut BuilderContext) -> Result<Token>

Builds and adds the CustomDebugInformation entry to the metadata

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

§Parameters
  • context: Mutable reference to the builder context
§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 context = BuilderContext::new();
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 context)?;

Trait Implementations§

§

impl Clone for CustomDebugInformationBuilder

§

fn clone(&self) -> CustomDebugInformationBuilder

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
§

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> 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> 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<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> Same for T

Source§

type Output = T

Should always be Self
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.