pub struct DefRecord {
pub id: String,
pub name: String,
pub namespace: String,
pub kind: String,
pub line: usize,
pub methods: Vec<String>,
pub properties: Vec<String>,
pub fields: Vec<String>,
pub method_returns: Vec<(String, String)>,
pub extension_methods: Vec<ExtensionMethod>,
pub bases: Vec<String>,
pub type_params: Vec<String>,
pub base_generic_args: Vec<(String, Vec<String>)>,
pub test_methods: Vec<String>,
pub property_types: Vec<(String, Fact)>,
pub field_types: Vec<(String, Fact)>,
pub method_return_args: Vec<(String, Vec<String>)>,
pub non_public_methods: Vec<String>,
pub method_arities: Vec<(String, Vec<(usize, i64)>)>,
pub method_type_arities: Vec<(String, Vec<usize>)>,
pub method_type_param_sites: Vec<(String, Vec<OverloadTypeParamSites>)>,
pub method_params: Vec<(String, Vec<Vec<String>>)>,
pub override_methods: Vec<String>,
pub base_type_args: Vec<(String, Vec<String>)>,
pub property_message_args: Vec<String>,
pub array_message_bases: Vec<String>,
pub delegate_signature: Option<DelegateSignature>,
pub end_line: usize,
}
pub type OverloadTypeParamSites = Vec<Vec<(usize, i64)>>;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DelegateSignature {
pub returns: String,
pub type_params: Vec<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct LambdaShape {
pub value_only: bool,
pub implicitly_typed: bool,
}
#[derive(Debug, Clone, PartialEq)]
pub struct PublishRecord {
pub verb: String,
pub message: String,
pub namespace: String,
pub line: usize,
pub outer_types: Vec<String>,
pub enclosing_method: Option<String>,
pub arg_count: usize,
pub enclosing_call: Option<EnclosingCallFact>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct EnclosingCallFact {
pub verb: String,
pub arg_position: usize,
pub arg_count: usize,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ExtensionMethod {
pub name: String,
pub this_type: String,
pub arity_min: usize,
pub arity_max: i64,
pub this_args: Option<Vec<String>>,
pub type_param_count: usize,
}
pub struct RefRecord {
pub kind: String,
pub name: String,
pub qualified: Option<String>,
pub member: Option<String>,
pub line: usize,
pub namespace: Option<String>,
pub type_arg_count: Option<usize>,
pub generic: bool,
pub receiver_type: Option<String>,
pub receiver_type_qualified: Option<String>,
pub arg_count: Option<usize>,
pub receiver_args: Option<Vec<String>>,
pub outer_types: Vec<String>,
pub args: Option<Vec<String>>,
pub receiver_property_owner: Option<String>,
pub receiver_call_owner: Option<String>,
pub receiver_call_member: Option<String>,
pub receiver_base: bool,
pub receiver_awaited: bool,
pub receiver_local: bool,
pub receiver_lambda: Option<LambdaSlot>,
pub receiver_nullable: bool,
pub lambda_arg_arity: Option<Vec<Option<usize>>>,
pub method_type_arg_count: Option<usize>,
pub lambda_arg_shape: Option<Vec<Option<LambdaShape>>>,
pub arg_types: Option<Vec<Option<ArgTypeRecord>>>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum ArgTypeRecord {
Known(String),
Member {
owner: String,
member: String,
receiver_args: Option<Vec<String>>,
call: bool,
},
}
pub enum UsingRecord {
Alias {
alias: String,
target: String,
global: bool,
},
Plain {
text: String,
global: bool,
namespace: String,
},
}
pub struct Extraction {
pub purpose: Option<String>,
pub defs: Vec<DefRecord>,
pub usings: Vec<UsingRecord>,
pub refs: Vec<RefRecord>,
pub names: Vec<NameRecord>,
pub registrations: Vec<RegistrationRecord>,
pub publishes: Vec<PublishRecord>,
pub handler_registrations: Vec<HandlerRegistrationRecord>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct HandlerRegistrationRecord {
pub handler: String,
pub namespace: String,
pub line: usize,
}
#[derive(Debug, Clone, PartialEq)]
pub struct RegistrationRecord {
pub service: String,
pub implementation: String,
pub namespace: String,
pub line: usize,
}
#[derive(Debug, Clone, PartialEq)]
pub struct NameRecord {
pub name: String,
pub kind: String,
pub line: usize,
pub owner: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LambdaSlot {
pub owner: String,
pub member: String,
pub arg_count: usize,
pub arg_index: usize,
pub arity: usize,
pub index: usize,
}
#[derive(Clone, PartialEq, Eq)]
pub struct Fact {
pub type_name: String,
pub qualified_type: Option<String>,
pub descriptor: Option<String>,
pub receiver_admissible: bool,
pub args: Option<Vec<String>>,
pub call: Option<String>,
pub awaited: bool,
pub is_array: bool,
pub nullable: bool,
pub lambda: Option<LambdaSlot>,
}