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 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
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, context: &mut BuilderContext) -> Result<Token>
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 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 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
impl Clone for CustomDebugInformationBuilder
§fn clone(&self) -> CustomDebugInformationBuilder
fn clone(&self) -> CustomDebugInformationBuilder
1.0.0 · 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 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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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 more