use alloc::string::String;
use luaur_analysis::records::file_resolver::{FileResolver, FileResolverVtable};
use luaur_analysis::records::module_info::ModuleInfo;
use luaur_analysis::records::source_code::SourceCode;
use luaur_analysis::records::type_check_limits::TypeCheckLimits;
use luaur_analysis::type_aliases::module_name_file_resolver::ModuleName;
use luaur_ast::records::ast_expr::AstExpr;
#[repr(C)]
pub struct CliFileResolver {
pub base: FileResolver,
}
pub(crate) unsafe fn cli_file_resolver_read_source_thunk(
this: *mut FileResolver,
name: &ModuleName,
) -> Option<SourceCode> {
let this = this as *mut CliFileResolver;
(*this).read_source(name)
}
pub(crate) unsafe fn cli_file_resolver_resolve_module_thunk(
this: *mut FileResolver,
context: *const ModuleInfo,
expr: *mut AstExpr,
limits: &TypeCheckLimits,
) -> Option<ModuleInfo> {
let this = this as *mut CliFileResolver;
(*this).resolve_module(context, expr, limits)
}
pub(crate) unsafe fn cli_file_resolver_get_human_readable_module_name_thunk(
this: *const FileResolver,
name: &ModuleName,
) -> String {
let this = this as *const CliFileResolver;
crate::methods::cli_file_resolver_get_human_readable_module_name::cli_file_resolver_get_human_readable_module_name(
this, name,
)
}
unsafe fn cli_file_resolver_get_environment_for_module_default(
_this: *const FileResolver,
_name: &ModuleName,
) -> Option<String> {
None
}
impl CliFileResolver {
pub fn new() -> Self {
let vtable = FileResolverVtable {
read_source: cli_file_resolver_read_source_thunk,
resolve_module: cli_file_resolver_resolve_module_thunk,
get_human_readable_module_name: cli_file_resolver_get_human_readable_module_name_thunk,
get_environment_for_module: cli_file_resolver_get_environment_for_module_default,
};
CliFileResolver {
base: FileResolver {
vtable,
require_suggester: None,
},
}
}
}
impl Default for CliFileResolver {
fn default() -> Self {
Self::new()
}
}