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 elementkind: GUID heap index identifying the type of custom debug informationvalue: 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
impl CustomDebugInformationBuilder
pub fn new() -> Self
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
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
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 heappub fn value(self, value: &[u8]) -> Self
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>
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 informationErr(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
impl Clone for CustomDebugInformationBuilder
§fn clone(&self) -> CustomDebugInformationBuilder
fn clone(&self) -> CustomDebugInformationBuilder
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for CustomDebugInformationBuilder
impl Debug for CustomDebugInformationBuilder
§impl Default for CustomDebugInformationBuilder
impl Default for CustomDebugInformationBuilder
§fn default() -> Self
fn default() -> Self
Creates a default CustomDebugInformationBuilder
Equivalent to calling CustomDebugInformationBuilder::new().
Auto Trait Implementations§
impl Freeze for CustomDebugInformationBuilder
impl RefUnwindSafe for CustomDebugInformationBuilder
impl Send for CustomDebugInformationBuilder
impl Sync for CustomDebugInformationBuilder
impl Unpin for CustomDebugInformationBuilder
impl UnsafeUnpin for CustomDebugInformationBuilder
impl UnwindSafe for CustomDebugInformationBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for T
impl<T> Downcast for T
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.