Audit public API and SemVer surface (#103)
Some checks failed
API and SemVer surface / api-surface (push) Failing after 13m8s
Native code generation / deterministic (push) Failing after 2m8s
Concurrency and resource soak audit / soak (push) Failing after 6m39s
Imaging and meshing gate / native (push) Has been cancelled
Release platform and feature matrix / audit (push) Has been cancelled
Release platform and feature matrix / matrix (false, linux-stable-minimal, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (false, macos-stable-portable, x86_64-apple-darwin, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (false, windows-stable-portable, x86_64-pc-windows-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-msrv-portable, x86_64-unknown-linux-gnu, 1.96.0) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-default, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-features, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-release-surface, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Documentation / documentation (push) Has been cancelled
Native Rust workspace compile / compile (push) Has been cancelled
Dependency and supply-chain audit / audit (push) Has been cancelled
JPEG 2000 feature / linux (push) Successful in 2m46s
Skia feature / linux (push) Successful in 31m0s

This commit is contained in:
2026-08-12 01:35:26 +00:00
parent 5eb3f01122
commit d08b59c9a9
35 changed files with 5112 additions and 67 deletions

View File

@@ -9,6 +9,6 @@ Generated by `metacrate-ci-matrix documentation-report`; do not edit by hand.
| Mapped public members | 30789 | 30789 | 100% |
| Compiled Rust guide snippets | 5 | 4 minimum | pass |
| Linked native programs | 9 | 9 | 100% |
| Checked local Markdown links | 65 | 65 | 100% |
| Checked local Markdown links | 69 | 69 | 100% |
Every mapped item is tied to its exact C# documentation ID and to the ownership, asyncness, error, overload, mapping-kind, and Rust-signature decisions in [`RUST-MAPPING.tsv`](RUST-MAPPING.tsv). Public types are tied to the corresponding type mapping. The upstream source is pinned to [`2aa70bb68513b39795da5d13c88f31b86e85a3ba`](https://github.com/cinderblocks/libremetaverse/tree/2aa70bb68513b39795da5d13c88f31b86e85a3ba).

View File

@@ -47,7 +47,7 @@ External member APIs are not copied. Each signature type resolves to Rust core/s
- Properties/indexers/events: **5,090 / 11 / 268**
- Delegates and flags enums: **40 / 46**
- Optional/ref/out/in parameters: **470 / 6,144 / 555 / 0**
- Async Rust signatures: **328**
- Async Rust signatures: **334**
- Descriptively renamed overloads: **7,151**
- Explicit CLR delegate APM differences: **80**

View File

@@ -61,6 +61,21 @@ rejects stale, missing, duplicate, or erased entries; and verifies
`API-COVERAGE.md`. Regenerate that report with
`python3 tools/check_api_coverage.py --write`.
The reviewed first-release public surface is stored in
[`SEMVER-BASELINE.json`](SEMVER-BASELINE.json), with the decisions and migration
recipes rendered in [`SEMVER-AUDIT.md`](SEMVER-AUDIT.md). The audit compares
mapping/export coverage, normalized Rust declarations, feature sets, ownership,
async and error contracts, thread-safety boundaries, and public dependency
types. Record a deliberate baseline only after reviewing its SemVer impact,
then verify it and write reproducible evidence:
```sh
cargo run --locked -p metacrate-ci-matrix -- api-baseline-write
cargo run --locked -p metacrate-ci-matrix -- api-audit \
--evidence /tmp/metacrate-api-audit.json
cmp /tmp/metacrate-api-audit.json ci/evidence/api-audit.json
```
Native implementations replace whole generated types where practical. The
generated module retains the catalog markers and re-exports the hand-written
type; member-level implementations use an explicit generator registry. This

View File

@@ -10371,7 +10371,7 @@ M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.AddPolicy(LibreMetavers
M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.CanAttach(LibreMetaverse.InventoryItem) method System.Boolean LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.CanAttach(LibreMetaverse.InventoryItem item) libremetaverse appearance libremetaverse::appearance::CompositeCurrentOutfitPolicy::can_attach pub fn can_attach(&self, item: Option<std::sync::Arc<libremetaverse::InventoryItem>>) -> Result<bool, crate::Error> shared_self,optional_shared sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.CanDetach(LibreMetaverse.InventoryItem) method System.Boolean LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.CanDetach(LibreMetaverse.InventoryItem item) libremetaverse appearance libremetaverse::appearance::CompositeCurrentOutfitPolicy::can_detach pub fn can_detach(&self, item: Option<std::sync::Arc<libremetaverse::InventoryItem>>) -> Result<bool, crate::Error> shared_self,optional_shared sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.RemovePolicy(LibreMetaverse.Appearance.ICurrentOutfitPolicy) method System.Void LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.RemovePolicy(LibreMetaverse.Appearance.ICurrentOutfitPolicy policyToRemove) libremetaverse appearance libremetaverse::appearance::CompositeCurrentOutfitPolicy::remove_policy pub fn remove_policy(&self, policy_to_remove: Option<std::sync::Arc<dyn libremetaverse::appearance::ICurrentOutfitPolicy>>) -> Result<(), crate::Error> shared_self,optional_shared sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.ReportItemChangeAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Threading.CancellationToken) method System.Threading.Tasks.Task LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.ReportItemChangeAsync(System.Collections.Generic.List<LibreMetaverse.InventoryItem> addedItems, System.Collections.Generic.List<LibreMetaverse.InventoryItem> removedItems, System.Threading.CancellationToken cancellationToken = default) libremetaverse appearance libremetaverse::appearance::CompositeCurrentOutfitPolicy::report_item_change pub async fn report_item_change(&self, added_items: Option<std::sync::Arc<Vec<libremetaverse::InventoryItem>>>, removed_items: Option<std::sync::Arc<Vec<libremetaverse::InventoryItem>>>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<(), crate::Error> shared_self,optional_shared,optional_shared,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.ReportItemChangeAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Threading.CancellationToken) method System.Threading.Tasks.Task LibreMetaverse.Appearance.CompositeCurrentOutfitPolicy.ReportItemChangeAsync(System.Collections.Generic.List<LibreMetaverse.InventoryItem> addedItems, System.Collections.Generic.List<LibreMetaverse.InventoryItem> removedItems, System.Threading.CancellationToken cancellationToken = default) libremetaverse appearance libremetaverse::appearance::CompositeCurrentOutfitPolicy::report_item_change pub async fn report_item_change(&self, added_items: Option<std::sync::Arc<Vec<libremetaverse::InventoryItem>>>, removed_items: Option<std::sync::Arc<Vec<libremetaverse::InventoryItem>>>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<(), crate::Error> shared_self,optional_shared,optional_shared,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.CurrentOutfitFolder.#ctor(LibreMetaverse.GridClient) constructor LibreMetaverse.Appearance.CurrentOutfitFolder(LibreMetaverse.GridClient client) libremetaverse appearance libremetaverse::appearance::CurrentOutfitFolder::new pub fn new(client: Option<std::sync::Arc<libremetaverse::GridClient>>) -> Result<Self, crate::Error> optional_shared sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.CurrentOutfitFolder.AddPolicy(LibreMetaverse.Appearance.ICurrentOutfitPolicy) method LibreMetaverse.Appearance.ICurrentOutfitPolicy LibreMetaverse.Appearance.CurrentOutfitFolder.AddPolicy(LibreMetaverse.Appearance.ICurrentOutfitPolicy policyToAdd) libremetaverse appearance libremetaverse::appearance::CurrentOutfitFolder::add_policy pub fn add_policy(&self, policy_to_add: std::sync::Arc<dyn libremetaverse::appearance::ICurrentOutfitPolicy>) -> Result<std::sync::Arc<dyn libremetaverse::appearance::ICurrentOutfitPolicy>, crate::Error> shared_self,shared sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.CurrentOutfitFolder.AddToOutfitAsync(LibreMetaverse.InventoryItem,System.Boolean,System.Threading.CancellationToken) method System.Threading.Tasks.Task LibreMetaverse.Appearance.CurrentOutfitFolder.AddToOutfitAsync(LibreMetaverse.InventoryItem item, System.Boolean replace, System.Threading.CancellationToken cancellationToken = default) libremetaverse appearance libremetaverse::appearance::CurrentOutfitFolder::add_to_outfit_with_inventory_item_boolean_cancellation_token pub async fn add_to_outfit_with_inventory_item_boolean_cancellation_token(&self, item: libremetaverse::InventoryItem, replace: bool, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<(), crate::Error> shared_self,owned,owned,optional_owned async Result<_, crate::Error> descriptive_overload_name method mapped
@@ -10393,7 +10393,7 @@ M:LibreMetaverse.Appearance.CurrentOutfitFolder.ReplaceOutfitAsync(LibreMetavers
M:LibreMetaverse.Appearance.CurrentOutfitFolder.ResolveInventoryLink(LibreMetaverse.InventoryItem) method LibreMetaverse.InventoryItem LibreMetaverse.Appearance.CurrentOutfitFolder.ResolveInventoryLink(LibreMetaverse.InventoryItem itemLink) libremetaverse appearance libremetaverse::appearance::CurrentOutfitFolder::resolve_inventory_link pub fn resolve_inventory_link(&self, item_link: std::sync::Arc<libremetaverse::InventoryItem>) -> Result<Option<std::sync::Arc<libremetaverse::InventoryItem>>, crate::Error> shared_self,shared sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.ICurrentOutfitPolicy.CanAttach(LibreMetaverse.InventoryItem) method System.Boolean LibreMetaverse.Appearance.ICurrentOutfitPolicy.CanAttach(LibreMetaverse.InventoryItem item) libremetaverse appearance libremetaverse::appearance::ICurrentOutfitPolicy::can_attach pub fn can_attach(&self, item: Option<std::sync::Arc<libremetaverse::InventoryItem>>) -> Result<bool, crate::Error> shared_self,optional_shared sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.ICurrentOutfitPolicy.CanDetach(LibreMetaverse.InventoryItem) method System.Boolean LibreMetaverse.Appearance.ICurrentOutfitPolicy.CanDetach(LibreMetaverse.InventoryItem item) libremetaverse appearance libremetaverse::appearance::ICurrentOutfitPolicy::can_detach pub fn can_detach(&self, item: Option<std::sync::Arc<libremetaverse::InventoryItem>>) -> Result<bool, crate::Error> shared_self,optional_shared sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.ICurrentOutfitPolicy.ReportItemChangeAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Threading.CancellationToken) method System.Threading.Tasks.Task LibreMetaverse.Appearance.ICurrentOutfitPolicy.ReportItemChangeAsync(System.Collections.Generic.List<LibreMetaverse.InventoryItem> addedItems, System.Collections.Generic.List<LibreMetaverse.InventoryItem> removedItems, System.Threading.CancellationToken cancellationToken = default) libremetaverse appearance libremetaverse::appearance::ICurrentOutfitPolicy::report_item_change pub fn report_item_change(&self, added_items: Option<std::sync::Arc<Vec<libremetaverse::InventoryItem>>>, removed_items: Option<std::sync::Arc<Vec<libremetaverse::InventoryItem>>>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> std::pin::Pin<Box<dyn std::future::Future<Output = Result<(), crate::Error>> + Send + '_>> shared_self,optional_shared,optional_shared,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.ICurrentOutfitPolicy.ReportItemChangeAsync(System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Threading.CancellationToken) method System.Threading.Tasks.Task LibreMetaverse.Appearance.ICurrentOutfitPolicy.ReportItemChangeAsync(System.Collections.Generic.List<LibreMetaverse.InventoryItem> addedItems, System.Collections.Generic.List<LibreMetaverse.InventoryItem> removedItems, System.Threading.CancellationToken cancellationToken = default) libremetaverse appearance libremetaverse::appearance::ICurrentOutfitPolicy::report_item_change pub fn report_item_change(&self, added_items: Option<std::sync::Arc<Vec<libremetaverse::InventoryItem>>>, removed_items: Option<std::sync::Arc<Vec<libremetaverse::InventoryItem>>>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> std::pin::Pin<Box<dyn std::future::Future<Output = Result<(), crate::Error>> + Send + '_>> shared_self,optional_shared,optional_shared,optional_owned boxed_future Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.InitialOutfit.#ctor(LibreMetaverse.GridClient,LibreMetaverse.Appearance.CurrentOutfitFolder) constructor LibreMetaverse.Appearance.InitialOutfit(LibreMetaverse.GridClient client, LibreMetaverse.Appearance.CurrentOutfitFolder cof) libremetaverse appearance libremetaverse::appearance::InitialOutfit::new pub fn new(client: libremetaverse::GridClient, cof: libremetaverse::appearance::CurrentOutfitFolder) -> Result<Self, crate::Error> owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.InitialOutfit.CheckSystemFoldersAsync(System.Threading.CancellationToken) method System.Threading.Tasks.Task LibreMetaverse.Appearance.InitialOutfit.CheckSystemFoldersAsync(System.Threading.CancellationToken cancellationToken = default) libremetaverse appearance libremetaverse::appearance::InitialOutfit::check_system_folders pub async fn check_system_folders(&self, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<(), crate::Error> shared_self,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.Appearance.InitialOutfit.CopyFolderAsync(LibreMetaverse.InventoryFolder,LibreMetaverse.UUID,System.Threading.CancellationToken,System.IProgress{LibreMetaverse.Appearance.InitialOutfit.InitialOutfitProgress}) method System.Threading.Tasks.Task<LibreMetaverse.UUID> LibreMetaverse.Appearance.InitialOutfit.CopyFolderAsync(LibreMetaverse.InventoryFolder folder, LibreMetaverse.UUID destination, System.Threading.CancellationToken cancellationToken = default, System.IProgress<LibreMetaverse.Appearance.InitialOutfit.InitialOutfitProgress> progress = default) libremetaverse appearance libremetaverse::appearance::InitialOutfit::copy_folder pub async fn copy_folder(&self, folder: libremetaverse::InventoryFolder, destination: libremetaverse_types::UUID, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>, progress: Option<Box<dyn libremetaverse_types::compat::IProgress<libremetaverse::appearance::InitialOutfitInitialOutfitProgress>>>) -> Result<libremetaverse_types::UUID, crate::Error> shared_self,owned,owned,optional_owned,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
@@ -11887,7 +11887,7 @@ M:LibreMetaverse.InventoryManager.CreateItemFromAssetAsync(System.Byte[],System.
M:LibreMetaverse.InventoryManager.CreateItemFromAssetResult.#ctor constructor LibreMetaverse.InventoryManager.CreateItemFromAssetResult() libremetaverse libremetaverse::InventoryManagerCreateItemFromAssetResult::new pub fn new() -> Result<Self, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.CreateItemFromAssetVariablePriceAsync(System.Byte[],System.String,System.String,LibreMetaverse.AssetType,LibreMetaverse.InventoryType,LibreMetaverse.UUID,LibreMetaverse.Permissions,System.Func{System.Int32,System.Boolean},System.Threading.CancellationToken,System.IProgress{LibreMetaverse.HttpCapsClient.ProgressReport}) method System.Threading.Tasks.Task<LibreMetaverse.InventoryManager.CreateItemFromAssetResult> LibreMetaverse.InventoryManager.CreateItemFromAssetVariablePriceAsync(System.Byte[] data, System.String name, System.String description, LibreMetaverse.AssetType assetType, LibreMetaverse.InventoryType invType, LibreMetaverse.UUID folderID, LibreMetaverse.Permissions permissions, System.Func<System.Int32, System.Boolean> confirmCost = default, System.Threading.CancellationToken cancellationToken = default, System.IProgress<LibreMetaverse.HttpCapsClient.ProgressReport> progress = default) libremetaverse libremetaverse::InventoryManager::create_item_from_asset_variable_price pub async fn create_item_from_asset_variable_price(&self, data: Vec<u8>, name: String, description: String, asset_type: libremetaverse_types::AssetType, inv_type: libremetaverse_types::InventoryType, folder_id: libremetaverse_types::UUID, permissions: libremetaverse::Permissions, confirm_cost: Option<Box<dyn Fn(i32) -> bool + Send + Sync>>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>, progress: Option<Box<dyn libremetaverse_types::compat::IProgress<libremetaverse::HttpCapsClientProgressReport>>>) -> Result<libremetaverse::InventoryManagerCreateItemFromAssetResult, crate::Error> shared_self,owned,owned,owned,owned,owned,owned,owned,optional_owned,optional_owned,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.CreateLinkAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.String,LibreMetaverse.InventoryType,LibreMetaverse.UUID,System.Threading.CancellationToken) method System.Threading.Tasks.Task<LibreMetaverse.InventoryItem> LibreMetaverse.InventoryManager.CreateLinkAsync(LibreMetaverse.UUID folderID, LibreMetaverse.UUID itemID, System.String name, System.String description, LibreMetaverse.InventoryType invType, LibreMetaverse.UUID transactionID, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::InventoryManager::create_link pub async fn create_link(&self, folder_id: libremetaverse_types::UUID, item_id: libremetaverse_types::UUID, name: String, description: String, inv_type: libremetaverse_types::InventoryType, transaction_id: libremetaverse_types::UUID, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<Option<libremetaverse::InventoryItem>, crate::Error> shared_self,owned,owned,owned,owned,owned,owned,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.CreateLinksAsync(LibreMetaverse.UUID,System.Collections.Generic.IEnumerable{System.ValueTuple{LibreMetaverse.InventoryBase,System.String}},System.Action{System.Boolean},System.Threading.CancellationToken) method System.Threading.Tasks.Task LibreMetaverse.InventoryManager.CreateLinksAsync(LibreMetaverse.UUID folderID, System.Collections.Generic.IEnumerable<System.ValueTuple<LibreMetaverse.InventoryBase, System.String>> linksToCreate, System.Action<System.Boolean> callback, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::InventoryManager::create_links pub async fn create_links(&self, folder_id: libremetaverse_types::UUID, links_to_create: Box<dyn Iterator<Item = (libremetaverse::InventoryItem, String)>>, callback: Option<Box<dyn Fn(bool) + Send + Sync>>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<(), crate::Error> shared_self,owned,owned,optional_owned,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.CreateLinksAsync(LibreMetaverse.UUID,System.Collections.Generic.IEnumerable{System.ValueTuple{LibreMetaverse.InventoryBase,System.String}},System.Action{System.Boolean},System.Threading.CancellationToken) method System.Threading.Tasks.Task LibreMetaverse.InventoryManager.CreateLinksAsync(LibreMetaverse.UUID folderID, System.Collections.Generic.IEnumerable<System.ValueTuple<LibreMetaverse.InventoryBase, System.String>> linksToCreate, System.Action<System.Boolean> callback, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::InventoryManager::create_links pub async fn create_links(&self, folder_id: libremetaverse_types::UUID, links_to_create: Box<dyn Iterator<Item = (libremetaverse::InventoryItem, String)>>, callback: Option<Box<dyn Fn(bool) + Send + Sync>>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<(), crate::Error> shared_self,owned,owned,optional_owned,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.CreateOrRetrieveInventoryItem(LibreMetaverse.InventoryType,LibreMetaverse.UUID) method LibreMetaverse.InventoryItem LibreMetaverse.InventoryManager.CreateOrRetrieveInventoryItem(LibreMetaverse.InventoryType InvType, LibreMetaverse.UUID ItemID) libremetaverse libremetaverse::InventoryManager::create_or_retrieve_inventory_item pub fn create_or_retrieve_inventory_item(&self, inv_type: libremetaverse_types::InventoryType, item_id: libremetaverse_types::UUID) -> Result<libremetaverse::InventoryItem, crate::Error> shared_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.DecryptShadowID(LibreMetaverse.UUID) method LibreMetaverse.UUID LibreMetaverse.InventoryManager.DecryptShadowID(LibreMetaverse.UUID shadowID) libremetaverse libremetaverse::InventoryManager::decrypt_shadow_id pub fn decrypt_shadow_id(shadow_id: libremetaverse_types::UUID) -> Result<libremetaverse_types::UUID, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.Dispose method System.Void LibreMetaverse.InventoryManager.Dispose() libremetaverse libremetaverse::InventoryManager::dispose pub fn dispose(&self) -> Result<(), crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
@@ -11900,10 +11900,10 @@ M:LibreMetaverse.InventoryManager.FetchItemHttpAsync(LibreMetaverse.UUID,LibreMe
M:LibreMetaverse.InventoryManager.FindFolderForType(LibreMetaverse.AssetType) method LibreMetaverse.UUID LibreMetaverse.InventoryManager.FindFolderForType(LibreMetaverse.AssetType type) libremetaverse libremetaverse::InventoryManager::find_folder_for_type_with_asset_type pub fn find_folder_for_type_with_asset_type(&self, type_: libremetaverse_types::AssetType) -> Result<libremetaverse_types::UUID, crate::Error> shared_self,owned sync Result<_, crate::Error> descriptive_overload_name method mapped
M:LibreMetaverse.InventoryManager.FindFolderForType(LibreMetaverse.FolderType) method LibreMetaverse.UUID LibreMetaverse.InventoryManager.FindFolderForType(LibreMetaverse.FolderType type) libremetaverse libremetaverse::InventoryManager::find_folder_for_type_with_folder_type pub fn find_folder_for_type_with_folder_type(&self, type_: libremetaverse_types::FolderType) -> Result<libremetaverse_types::UUID, crate::Error> shared_self,owned sync Result<_, crate::Error> descriptive_overload_name method mapped
M:LibreMetaverse.InventoryManager.FindObjectByPathAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.String,System.Threading.CancellationToken) method System.Threading.Tasks.Task<LibreMetaverse.UUID> LibreMetaverse.InventoryManager.FindObjectByPathAsync(LibreMetaverse.UUID baseFolder, LibreMetaverse.UUID inventoryOwner, System.String path, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::InventoryManager::find_object_by_path pub async fn find_object_by_path(&self, base_folder: libremetaverse_types::UUID, inventory_owner: libremetaverse_types::UUID, path: String, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<libremetaverse_types::UUID, crate::Error> shared_self,owned,owned,owned,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.FolderContentsAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Boolean,System.Boolean,LibreMetaverse.InventorySortOrder,System.Threading.CancellationToken,System.Boolean) method System.Threading.Tasks.Task<System.Collections.Generic.List<LibreMetaverse.InventoryBase>> LibreMetaverse.InventoryManager.FolderContentsAsync(LibreMetaverse.UUID folder, LibreMetaverse.UUID owner, System.Boolean fetchFolders, System.Boolean fetchItems, LibreMetaverse.InventorySortOrder order, System.Threading.CancellationToken cancellationToken = default, System.Boolean followLinks = default) libremetaverse libremetaverse::InventoryManager::folder_contents pub async fn folder_contents(&self, folder: libremetaverse_types::UUID, owner: libremetaverse_types::UUID, fetch_folders: bool, fetch_items: bool, order: libremetaverse::InventorySortOrder, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>, follow_links: Option<bool>) -> Result<Vec<Box<dyn libremetaverse::InventoryObjectClass>>, crate::Error> shared_self,owned,owned,owned,owned,owned,optional_owned,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.FolderContentsAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Boolean,System.Boolean,LibreMetaverse.InventorySortOrder,System.Threading.CancellationToken,System.Boolean) method System.Threading.Tasks.Task<System.Collections.Generic.List<LibreMetaverse.InventoryBase>> LibreMetaverse.InventoryManager.FolderContentsAsync(LibreMetaverse.UUID folder, LibreMetaverse.UUID owner, System.Boolean fetchFolders, System.Boolean fetchItems, LibreMetaverse.InventorySortOrder order, System.Threading.CancellationToken cancellationToken = default, System.Boolean followLinks = default) libremetaverse libremetaverse::InventoryManager::folder_contents pub async fn folder_contents(&self, folder: libremetaverse_types::UUID, owner: libremetaverse_types::UUID, fetch_folders: bool, fetch_items: bool, order: libremetaverse::InventorySortOrder, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>, follow_links: Option<bool>) -> Result<Vec<Box<dyn libremetaverse::InventoryObjectClass>>, crate::Error> shared_self,owned,owned,owned,owned,owned,optional_owned,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.FolderUpdateResult.#ctor constructor LibreMetaverse.InventoryManager.FolderUpdateResult() libremetaverse libremetaverse::InventoryManagerFolderUpdateResult::new pub fn new() -> Result<Self, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.GetInventoryRecursiveAsync(LibreMetaverse.UUID,LibreMetaverse.UUID,System.Collections.Generic.List{LibreMetaverse.InventoryFolder},System.Collections.Generic.List{LibreMetaverse.InventoryItem},System.Threading.CancellationToken) method System.Threading.Tasks.Task LibreMetaverse.InventoryManager.GetInventoryRecursiveAsync(LibreMetaverse.UUID folderID, LibreMetaverse.UUID owner, System.Collections.Generic.List<LibreMetaverse.InventoryFolder> cats, System.Collections.Generic.List<LibreMetaverse.InventoryItem> items, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::InventoryManager::get_inventory_recursive pub async fn get_inventory_recursive(&self, folder_id: libremetaverse_types::UUID, owner: libremetaverse_types::UUID, cats: Vec<libremetaverse::InventoryFolder>, items: Vec<libremetaverse::InventoryItem>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<(), crate::Error> shared_self,owned,owned,owned,owned,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.GetTaskInventoryAsync(LibreMetaverse.UUID,System.UInt32,LibreMetaverse.Simulator,System.Threading.CancellationToken) method System.Threading.Tasks.Task<System.Collections.Generic.List<LibreMetaverse.InventoryBase>> LibreMetaverse.InventoryManager.GetTaskInventoryAsync(LibreMetaverse.UUID objectID, System.UInt32 objectLocalID, LibreMetaverse.Simulator simulator = default, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::InventoryManager::get_task_inventory pub async fn get_task_inventory(&self, object_id: libremetaverse_types::UUID, object_local_id: u32, simulator: Option<libremetaverse::Simulator>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<Vec<Box<dyn libremetaverse::InventoryObjectClass>>, crate::Error> shared_self,owned,owned,optional_owned,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.GetTaskInventoryAsync(LibreMetaverse.UUID,System.UInt32,LibreMetaverse.Simulator,System.Threading.CancellationToken) method System.Threading.Tasks.Task<System.Collections.Generic.List<LibreMetaverse.InventoryBase>> LibreMetaverse.InventoryManager.GetTaskInventoryAsync(LibreMetaverse.UUID objectID, System.UInt32 objectLocalID, LibreMetaverse.Simulator simulator = default, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::InventoryManager::get_task_inventory pub async fn get_task_inventory(&self, object_id: libremetaverse_types::UUID, object_local_id: u32, simulator: Option<libremetaverse::Simulator>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<Vec<Box<dyn libremetaverse::InventoryObjectClass>>, crate::Error> shared_self,owned,owned,optional_owned,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.GiveFolderAsync(LibreMetaverse.UUID,System.String,LibreMetaverse.UUID,System.Boolean,System.Threading.CancellationToken) method System.Threading.Tasks.Task LibreMetaverse.InventoryManager.GiveFolderAsync(LibreMetaverse.UUID folderID, System.String folderName, LibreMetaverse.UUID recipient, System.Boolean doEffect, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::InventoryManager::give_folder pub async fn give_folder(&self, folder_id: libremetaverse_types::UUID, folder_name: String, recipient: libremetaverse_types::UUID, do_effect: bool, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<(), crate::Error> shared_self,owned,owned,owned,owned,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.GiveItem(LibreMetaverse.UUID,System.String,LibreMetaverse.AssetType,LibreMetaverse.UUID,System.Boolean) method System.Void LibreMetaverse.InventoryManager.GiveItem(LibreMetaverse.UUID itemID, System.String itemName, LibreMetaverse.AssetType assetType, LibreMetaverse.UUID recipient, System.Boolean doEffect) libremetaverse libremetaverse::InventoryManager::give_item pub fn give_item(&self, item_id: libremetaverse_types::UUID, item_name: String, asset_type: libremetaverse_types::AssetType, recipient: libremetaverse_types::UUID, do_effect: bool) -> Result<(), crate::Error> shared_self,owned,owned,owned,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.InventoryManager.ItemCRC(LibreMetaverse.InventoryItem) method System.UInt32 LibreMetaverse.InventoryManager.ItemCRC(LibreMetaverse.InventoryItem iitem) libremetaverse libremetaverse::InventoryManager::item_crc pub fn item_crc(iitem: &libremetaverse::InventoryItem) -> Result<u32, crate::Error> shared_borrow sync Result<_, crate::Error> direct_snake_case method mapped
@@ -24948,8 +24948,8 @@ M:LibreMetaverse.TerrainCompressor.DecodePatchHeader(LibreMetaverse.BitPack,Syst
M:LibreMetaverse.TerrainCompressor.DecompressPatch(System.Int32[],LibreMetaverse.TerrainPatch.Header,LibreMetaverse.TerrainPatch.GroupHeader) method System.Single[] LibreMetaverse.TerrainCompressor.DecompressPatch(System.Int32[] patches, LibreMetaverse.TerrainPatch.Header header, LibreMetaverse.TerrainPatch.GroupHeader group) libremetaverse libremetaverse::TerrainCompressor::decompress_patch pub fn decompress_patch(patches: Vec<i32>, header: libremetaverse::TerrainPatchHeader, group: libremetaverse::TerrainPatchGroupHeader) -> Result<Vec<f32>, crate::Error> owned,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.TerrainManager.#ctor(LibreMetaverse.GridClient) constructor LibreMetaverse.TerrainManager(LibreMetaverse.GridClient client) libremetaverse libremetaverse::TerrainManager::new pub fn new(client: libremetaverse::GridClient) -> Result<Self, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.TerrainManager.Dispose method System.Void LibreMetaverse.TerrainManager.Dispose() libremetaverse libremetaverse::TerrainManager::dispose pub fn dispose(&self) -> Result<(), crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.TerrainManager.GetTerrainMaterialOverridesAsync(System.Threading.CancellationToken) method System.Threading.Tasks.Task<LibreMetaverse.Assets.AssetMaterial[]> LibreMetaverse.TerrainManager.GetTerrainMaterialOverridesAsync(System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::TerrainManager::get_terrain_material_overrides pub async fn get_terrain_material_overrides(&self, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<Option<Vec<Option<libremetaverse::assets::AssetMaterial>>>, crate::Error> shared_self,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.TerrainManager.SetTerrainMaterialOverridesAsync(LibreMetaverse.Assets.AssetMaterial[],System.Threading.CancellationToken) method System.Threading.Tasks.Task<System.Boolean> LibreMetaverse.TerrainManager.SetTerrainMaterialOverridesAsync(LibreMetaverse.Assets.AssetMaterial[] overrides, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::TerrainManager::set_terrain_material_overrides pub async fn set_terrain_material_overrides(&self, overrides: Vec<Option<libremetaverse::assets::AssetMaterial>>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<bool, crate::Error> shared_self,owned,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.TerrainManager.GetTerrainMaterialOverridesAsync(System.Threading.CancellationToken) method System.Threading.Tasks.Task<LibreMetaverse.Assets.AssetMaterial[]> LibreMetaverse.TerrainManager.GetTerrainMaterialOverridesAsync(System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::TerrainManager::get_terrain_material_overrides pub async fn get_terrain_material_overrides(&self, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<Option<Vec<Option<libremetaverse::assets::AssetMaterial>>>, crate::Error> shared_self,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.TerrainManager.SetTerrainMaterialOverridesAsync(LibreMetaverse.Assets.AssetMaterial[],System.Threading.CancellationToken) method System.Threading.Tasks.Task<System.Boolean> LibreMetaverse.TerrainManager.SetTerrainMaterialOverridesAsync(LibreMetaverse.Assets.AssetMaterial[] overrides, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::TerrainManager::set_terrain_material_overrides pub async fn set_terrain_material_overrides(&self, overrides: Vec<Option<libremetaverse::assets::AssetMaterial>>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<bool, crate::Error> shared_self,owned,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.TerrainPatch.#ctor constructor LibreMetaverse.TerrainPatch() libremetaverse libremetaverse::TerrainPatch::new pub fn new() -> Result<Self, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.TerrainPatch.Header.setPatchIDs(System.Int32,System.Int32) method System.Int32 LibreMetaverse.TerrainPatch.Header.setPatchIDs(System.Int32 xx, System.Int32 yy) libremetaverse libremetaverse::TerrainPatchHeader::set_patch_i_ds pub fn set_patch_i_ds(&mut self, xx: i32, yy: i32) -> Result<i32, crate::Error> mutable_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
M:LibreMetaverse.TerseObjectUpdateEventArgs.#ctor(LibreMetaverse.Simulator,LibreMetaverse.Primitive,LibreMetaverse.ObjectMovementUpdate,System.UInt16) constructor LibreMetaverse.TerseObjectUpdateEventArgs(LibreMetaverse.Simulator simulator, LibreMetaverse.Primitive prim, LibreMetaverse.ObjectMovementUpdate update, System.UInt16 timeDilation) libremetaverse libremetaverse::TerseObjectUpdateEventArgs::new pub fn new(simulator: libremetaverse::Simulator, prim: libremetaverse::Primitive, update: libremetaverse::ObjectMovementUpdate, time_dilation: u16) -> Result<Self, crate::Error> owned,owned,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
@@ -26181,7 +26181,7 @@ P:LibreMetaverse.EventQueueRunningEventArgs.Simulator property LibreMetaverse.Si
P:LibreMetaverse.ExperienceInfoEventArgs.ExperienceInfo property LibreMetaverse.Messages.Linden.ExperienceInfoMessage LibreMetaverse.ExperienceInfoEventArgs.ExperienceInfo libremetaverse libremetaverse::ExperienceInfoEventArgs::experience_info pub fn experience_info(&self) -> libremetaverse::messages::linden::ExperienceInfoMessage shared_self sync infallible_placeholder direct_snake_case accessor_methods mapped
P:LibreMetaverse.ExperiencePreferencesEventArgs.Preferences property LibreMetaverse.Messages.Linden.ExperiencePreferencesMessage LibreMetaverse.ExperiencePreferencesEventArgs.Preferences libremetaverse libremetaverse::ExperiencePreferencesEventArgs::preferences pub fn preferences(&self) -> libremetaverse::messages::linden::ExperiencePreferencesMessage shared_self sync infallible_placeholder direct_snake_case accessor_methods mapped
P:LibreMetaverse.ExpiringCache`2.Count property System.Int32 LibreMetaverse.ExpiringCache<TKey, TValue>.Count libremetaverse-types libremetaverse_types::ExpiringCache::count pub fn count(&self) -> i32 shared_self sync infallible_placeholder direct_snake_case accessor_methods mapped
P:LibreMetaverse.ExpiringCache`2.Item(`0) indexer System.Object LibreMetaverse.ExpiringCache<TKey, TValue>.Item libremetaverse-types libremetaverse_types::ExpiringCache::item pub fn item(&self, key: TKey) -> Option<TValue> shared_self,owned sync Result<_, crate::Error> direct_snake_case method mapped
P:LibreMetaverse.ExpiringCache`2.Item(`0) indexer System.Object LibreMetaverse.ExpiringCache<TKey, TValue>.Item libremetaverse-types libremetaverse_types::ExpiringCache::item pub fn item(&self, key: TKey) -> Option<TValue> shared_self,owned sync none direct_snake_case method mapped
P:LibreMetaverse.FindObjectByPathReplyEventArgs.InventoryObjectID property LibreMetaverse.UUID LibreMetaverse.FindObjectByPathReplyEventArgs.InventoryObjectID libremetaverse libremetaverse::FindObjectByPathReplyEventArgs::inventory_object_id pub fn inventory_object_id(&self) -> libremetaverse_types::UUID shared_self sync infallible_placeholder direct_snake_case accessor_methods mapped
P:LibreMetaverse.FindObjectByPathReplyEventArgs.Path property System.String LibreMetaverse.FindObjectByPathReplyEventArgs.Path libremetaverse libremetaverse::FindObjectByPathReplyEventArgs::path pub fn path(&self) -> String shared_self sync infallible_placeholder direct_snake_case accessor_methods mapped
P:LibreMetaverse.FolderUpdatedEventArgs.FolderID property LibreMetaverse.UUID LibreMetaverse.FolderUpdatedEventArgs.FolderID libremetaverse libremetaverse::FolderUpdatedEventArgs::folder_id pub fn folder_id(&self) -> libremetaverse_types::UUID shared_self sync infallible_placeholder direct_snake_case accessor_methods mapped
Can't render this file because it is too large.

56
api/SEMVER-AUDIT.md Normal file
View File

@@ -0,0 +1,56 @@
# First-release API and SemVer audit
Generated by `metacrate-ci-matrix api-baseline-write`; do not edit by hand.
The compatibility source is pinned at [`2aa70bb68513b39795da5d13c88f31b86e85a3ba`](https://github.com/cinderblocks/libremetaverse/tree/2aa70bb68513b39795da5d13c88f31b86e85a3ba). The baseline version is `0.0.1`.
## Coverage and quality decisions
- Mapped/exported public types: **3066 / 3066**; unexplained mappings: **0**.
- Mapped/exported public members: **30789 / 30789**; duplicate destinations: **0**.
- Rust naming and ownership: mapped function/constant names follow Rust conventions and every member uses a reviewed ownership term.
- External signature types: **142**; referenced support traits: **2**; accidental dependency types exposed by mapped signatures or public Rust declarations: **0**.
- Intentional delegate APM replacements: **80**; each uses a native callback and is compiled by the downstream fixture.
- Descriptively named overloads: **7151**; names remain fixed by the mapping ledger.
- Native `async fn` mappings: **334**; boxed object-safe trait futures with explicit `Send`: **26**.
- Callback signatures requiring `Send + Sync`: **137**; reviewed dyn-compatible thread-safe boundary traits: **6** (`IGridClient`, `IBakingTextureProvider`, `ICurrentOutfitPolicy`, `IRlvActionCallbacks`, `IRlvQueryCallbacks`, and `IVoiceLogger`).
- C# enum mappings: **243** (46 unknown-bit-retaining flag types); stable public error enums marked `non_exhaustive`: **7**.
## Crate baselines
| Crate | Mapped types | Mapped members | Rust declarations | Features | Declaration SHA-256 |
| --- | ---: | ---: | ---: | --- | --- |
| `libremetaverse` | 2711 | 27281 | 24505 | dds-bc67, default, jpeg2000, vorbis | `6eb9365e6833584b741afdb9816ec911f4d922aba561daedc0877d711de474b3` |
| `libremetaverse-types` | 45 | 942 | 871 | none | `c5ea3a9cab936bbb4c7fa527753ba5608de0115f13f5c59ad6a7c549dc0d97ca` |
| `libremetaverse-structured-data` | 16 | 295 | 304 | none | `b1c2ca9a683efe92ea22293384189f9e7c9a1926860893ab78c41829e641a8c3` |
| `libremetaverse-imaging` | 3 | 20 | 63 | default, jpeg2000 | `bc3f5cf5a8f472b3d4092032be35202787f443f06a4998fe2533e21aadef2e86` |
| `libremetaverse-imaging-skia` | 1 | 3 | 13 | default, skia | `a6a1445725410a036204496ad4953c84dcfea1e6a00390ce4e10d12d36f2876b` |
| `libremetaverse-prim-mesher` | 17 | 207 | 117 | none | `dde798e86c485948f1d67e093f8194a76082101416516df3f8dca4de04c2d415` |
| `libremetaverse-rendering-simple` | 1 | 6 | 12 | none | `4dc284ea0abb16de63494435758c8b7c5eeb57a80d2e32a141e488e5861f2fad` |
| `libremetaverse-rendering-mesh-foundry` | 1 | 14 | 25 | none | `3689f6b454061fdae699d5fb66a11482909fa25bda398e26c38327995a9e2896` |
| `libremetaverse-lsl-tools` | 164 | 768 | 870 | none | `030c2418e08b6ea73878ba7d9c3f6983df9d3d32dda46e298fb6755a9f7e9599` |
| `libremetaverse-rlv` | 28 | 499 | 301 | none | `f2e0a4fd808f5bb4e646a92205bac0cfe60497f0888a3ffe9a5a0fcb5dd4250a` |
| `libremetaverse-utilities` | 3 | 13 | 17 | none | `0a3cedfd67031ae890295206a7451b9b4945c16b5fac5d4dce86384fc4524595` |
| `libremetaverse-voice-vivox` | 64 | 531 | 382 | none | `97d0ee1665140421477427115aa961c4ebcd4e80ed8b0e625373fe86d9857899` |
| `libremetaverse-voice-webrtc` | 12 | 210 | 290 | default, real-audio | `08ec9c36f47c51d0ae51089097887898f272417ae3ef410faa9a56f96337c470` |
| `libremetaverse-openjpeg` | 0 | 0 | 64 | none | `9967a29eb406c56afd2a2189e1395efb073c52d2a86cc5958a419cf67de0658b` |
| `libremetaverse-opus` | 0 | 0 | 9 | none | `c474538b08ecbb7d178d5ba63c5d15f21d8647b01f49654dc5c83ac1e691ea47` |
The exact mapping, exported-marker, feature, and normalized Rust declaration hashes are stored in [`SEMVER-BASELINE.json`](SEMVER-BASELINE.json). A change must be reviewed and classified before the baseline is re-recorded.
## Intentional Rust migration recipes
- C# `PascalCase` methods/properties become Rust `snake_case`; overloads use the ledger's stable descriptive suffix, never argument-count dispatch.
- C# reference ownership becomes owned values, shared or mutable borrows, `Arc`-backed managers, and explicit optional values as recorded per member.
- `Task<T>` becomes `async fn -> Result<T, Error>`; object-safe async traits return `Pin<Box<dyn Future<Output = Result<...>> + Send + '_>>`.
- .NET events become `subscribe_*` calls returning an owned `Subscription`; callbacks are `Send + Sync` and dispatch outside internal locks.
- `IDisposable` becomes explicit idempotent shutdown plus `Drop`; cancellation remains a typed `Error::Cancelled`.
- Closed C# enums retain fixed discriminants and are SemVer-breaking to extend; flags retain unknown bits, while public Rust error enums are `non_exhaustive`.
- Optional native backends remain feature-gated (`jpeg2000`, `skia`, `vorbis`, `real-audio`); default and empty-default sets are part of the baseline.
- Capability HTTP injection uses project-owned `HttpMessageHandler`, `CapsHttpLimits`, and `with_native_transport`; the internal `reqwest` client is not part of the public surface.
- External C# signature types map to core/std, adopted cross-platform crates, or project-owned boundary types; no third-party crate path leaks through mapped signatures or public Rust declarations.
## Compile consumers
- `tests/api-compile` compiles every mapped type/member from a standalone downstream workspace.
- `tests/semver-port` is a runnable representative port covering lifecycle, value types, structured data, imaging, RLV, cancellation, dyn trait, and `Send`/`Sync` contracts without network access.

189
api/SEMVER-BASELINE.json Normal file
View File

@@ -0,0 +1,189 @@
{
"schema": 1,
"release": "0.0.1",
"upstream_commit": "2aa70bb68513b39795da5d13c88f31b86e85a3ba",
"mapped_public_types": 3066,
"mapped_members": 30789,
"external_signature_types": 142,
"support_traits": 2,
"intentional_differences": 80,
"descriptive_overloads": 7151,
"async_functions": 334,
"send_boxed_futures": 26,
"thread_safe_callbacks": 137,
"thread_safe_dyn_traits": 6,
"non_exhaustive_error_enums": 7,
"enum_types": 243,
"bitflag_types": 46,
"unexplained_mappings": 0,
"accidental_public_dependency_types": 0,
"type_mapping_sha256": "21025889c62b0f8666a2dda46a03ff4f28931f51156927822a1c04e97b49f221",
"member_mapping_sha256": "14a40b155c93a8d3def627e1774464b1f710e6857ed249145ed63304ed684ac8",
"exported_mapping_sha256": "5b8a502ce229d26732744f2b44c029fc4a86b403966dc2f9b4a1c913a7b242b9",
"rust_declaration_sha256": "99ea016ab97a4c195f045fc6c22a0a76a5616f436c485bfd7e82568177762219",
"crates": [
{
"name": "libremetaverse",
"version": "0.0.1",
"features": {
"dds-bc67": [
"dep:bcdec_rs"
],
"default": [
"dds-bc67"
],
"jpeg2000": [
"libremetaverse-imaging/jpeg2000"
],
"vorbis": [
"dep:vorbis_rs"
]
},
"mapped_types": 2711,
"mapped_members": 27281,
"public_declarations": 24505,
"declaration_sha256": "6eb9365e6833584b741afdb9816ec911f4d922aba561daedc0877d711de474b3"
},
{
"name": "libremetaverse-types",
"version": "0.0.1",
"features": {},
"mapped_types": 45,
"mapped_members": 942,
"public_declarations": 871,
"declaration_sha256": "c5ea3a9cab936bbb4c7fa527753ba5608de0115f13f5c59ad6a7c549dc0d97ca"
},
{
"name": "libremetaverse-structured-data",
"version": "0.0.1",
"features": {},
"mapped_types": 16,
"mapped_members": 295,
"public_declarations": 304,
"declaration_sha256": "b1c2ca9a683efe92ea22293384189f9e7c9a1926860893ab78c41829e641a8c3"
},
{
"name": "libremetaverse-imaging",
"version": "0.0.1",
"features": {
"default": [],
"jpeg2000": [
"dep:libremetaverse-openjpeg"
]
},
"mapped_types": 3,
"mapped_members": 20,
"public_declarations": 63,
"declaration_sha256": "bc3f5cf5a8f472b3d4092032be35202787f443f06a4998fe2533e21aadef2e86"
},
{
"name": "libremetaverse-imaging-skia",
"version": "0.0.1",
"features": {
"default": [],
"skia": [
"dep:skia-safe"
]
},
"mapped_types": 1,
"mapped_members": 3,
"public_declarations": 13,
"declaration_sha256": "a6a1445725410a036204496ad4953c84dcfea1e6a00390ce4e10d12d36f2876b"
},
{
"name": "libremetaverse-prim-mesher",
"version": "0.0.1",
"features": {},
"mapped_types": 17,
"mapped_members": 207,
"public_declarations": 117,
"declaration_sha256": "dde798e86c485948f1d67e093f8194a76082101416516df3f8dca4de04c2d415"
},
{
"name": "libremetaverse-rendering-simple",
"version": "0.0.1",
"features": {},
"mapped_types": 1,
"mapped_members": 6,
"public_declarations": 12,
"declaration_sha256": "4dc284ea0abb16de63494435758c8b7c5eeb57a80d2e32a141e488e5861f2fad"
},
{
"name": "libremetaverse-rendering-mesh-foundry",
"version": "0.0.1",
"features": {},
"mapped_types": 1,
"mapped_members": 14,
"public_declarations": 25,
"declaration_sha256": "3689f6b454061fdae699d5fb66a11482909fa25bda398e26c38327995a9e2896"
},
{
"name": "libremetaverse-lsl-tools",
"version": "0.0.1",
"features": {},
"mapped_types": 164,
"mapped_members": 768,
"public_declarations": 870,
"declaration_sha256": "030c2418e08b6ea73878ba7d9c3f6983df9d3d32dda46e298fb6755a9f7e9599"
},
{
"name": "libremetaverse-rlv",
"version": "0.0.1",
"features": {},
"mapped_types": 28,
"mapped_members": 499,
"public_declarations": 301,
"declaration_sha256": "f2e0a4fd808f5bb4e646a92205bac0cfe60497f0888a3ffe9a5a0fcb5dd4250a"
},
{
"name": "libremetaverse-utilities",
"version": "0.0.1",
"features": {},
"mapped_types": 3,
"mapped_members": 13,
"public_declarations": 17,
"declaration_sha256": "0a3cedfd67031ae890295206a7451b9b4945c16b5fac5d4dce86384fc4524595"
},
{
"name": "libremetaverse-voice-vivox",
"version": "0.0.1",
"features": {},
"mapped_types": 64,
"mapped_members": 531,
"public_declarations": 382,
"declaration_sha256": "97d0ee1665140421477427115aa961c4ebcd4e80ed8b0e625373fe86d9857899"
},
{
"name": "libremetaverse-voice-webrtc",
"version": "0.0.1",
"features": {
"default": [],
"real-audio": [
"dep:cpal"
]
},
"mapped_types": 12,
"mapped_members": 210,
"public_declarations": 290,
"declaration_sha256": "08ec9c36f47c51d0ae51089097887898f272417ae3ef410faa9a56f96337c470"
},
{
"name": "libremetaverse-openjpeg",
"version": "0.0.1",
"features": {},
"mapped_types": 0,
"mapped_members": 0,
"public_declarations": 64,
"declaration_sha256": "9967a29eb406c56afd2a2189e1395efb073c52d2a86cc5958a419cf67de0658b"
},
{
"name": "libremetaverse-opus",
"version": "0.0.1",
"features": {},
"mapped_types": 0,
"mapped_members": 0,
"public_declarations": 9,
"declaration_sha256": "c474538b08ecbb7d178d5ba63c5d15f21d8647b01f49654dc5c83ac1e691ea47"
}
]
}