Implement native RLV state and permissions (#79)
Some checks failed
Native code generation / deterministic (push) Failing after 2m1s
Imaging and meshing gate / native (push) Successful in 5m22s
JPEG 2000 feature / linux (push) Successful in 2m45s
Native Rust workspace compile / compile (push) Failing after 6m12s
Skia feature / linux (push) Successful in 30m44s

This commit is contained in:
2026-08-10 23:55:11 +00:00
parent 468a0f0619
commit 362fa62059
12 changed files with 3429 additions and 347 deletions

View File

@@ -466,8 +466,18 @@ NATIVE_TYPES = {
# below. This is used for static namespace types such as OSDParser: the type is
# hand-written, while its fixed public methods remain generator-audited.
NATIVE_DECLARATIONS = {
"T:LibreMetaverse.RLV.CameraRestrictions": "crate::state::CameraRestrictions",
"T:LibreMetaverse.RLV.CameraSettings": "crate::state::CameraSettings",
"T:LibreMetaverse.RLV.EventArguments.RestrictionUpdatedEventArgs": "crate::state::RestrictionUpdatedEventArgs",
"T:LibreMetaverse.RLV.InventoryMap": "crate::state::InventoryMap",
"T:LibreMetaverse.RLV.LockedFolderPublic": "crate::state::LockedFolderPublic",
"T:LibreMetaverse.RLV.RlvBlacklist": "crate::state::RlvBlacklist",
"T:LibreMetaverse.RLV.RlvCommon": "crate::protocol::RlvCommon",
"T:LibreMetaverse.RLV.RlvInventoryItem": "crate::state::RlvInventoryItem",
"T:LibreMetaverse.RLV.RlvPermissionsService": "crate::state::RlvPermissionsService",
"T:LibreMetaverse.RLV.RlvRestriction": "crate::protocol::RlvRestriction",
"T:LibreMetaverse.RLV.RlvRestrictionManager": "crate::state::RlvRestrictionManager",
"T:LibreMetaverse.RLV.RlvSharedFolder": "crate::state::RlvSharedFolder",
"T:LibreMetaverse.AgentManager": "crate::agent_manager::AgentManager",
"T:LibreMetaverse.Animation": "crate::avatar_manager::Animation",
"T:LibreMetaverse.Animesh.AnimationTrack": "crate::animesh_runtime::AnimationTrack",
@@ -2427,6 +2437,194 @@ NATIVE_MEMBER_BODIES = {
"crate::byte_order::write_double_little_endian(dest, pos, value)",
}
# Native RLV state, inventory, lock, camera, and permission layer. Property
# setter entries use the generator's ``#set`` suffix so both C# accessors stay
# tied to explicit Rust implementations.
NATIVE_MEMBER_BODIES.update({
"P:LibreMetaverse.RLV.CameraRestrictions.AvDist": "self.native_av_dist()",
"P:LibreMetaverse.RLV.CameraRestrictions.AvDistMax": "self.native_av_dist_max()",
"P:LibreMetaverse.RLV.CameraRestrictions.AvDistMin": "self.native_av_dist_min()",
"P:LibreMetaverse.RLV.CameraRestrictions.DrawAlphaMax": "self.native_draw_alpha_max()",
"P:LibreMetaverse.RLV.CameraRestrictions.DrawAlphaMin": "self.native_draw_alpha_min()",
"P:LibreMetaverse.RLV.CameraRestrictions.DrawColor": "self.native_draw_color()",
"P:LibreMetaverse.RLV.CameraRestrictions.DrawMax": "self.native_draw_max()",
"P:LibreMetaverse.RLV.CameraRestrictions.DrawMin": "self.native_draw_min()",
"P:LibreMetaverse.RLV.CameraRestrictions.FovMax": "self.native_fov_max()",
"P:LibreMetaverse.RLV.CameraRestrictions.FovMin": "self.native_fov_min()",
"P:LibreMetaverse.RLV.CameraRestrictions.IsLocked": "self.native_is_locked()",
"P:LibreMetaverse.RLV.CameraRestrictions.Texture": "self.native_texture()",
"P:LibreMetaverse.RLV.CameraRestrictions.ZoomMax": "self.native_zoom_max()",
"P:LibreMetaverse.RLV.CameraRestrictions.ZoomMin": "self.native_zoom_min()",
"M:LibreMetaverse.RLV.CameraSettings.#ctor(System.Single,System.Single,System.Single,System.Single,System.Single,System.Single)":
"Self::native_new(av_dist_min, av_dist_max, fov_min, fov_max, zoom_min, current_fov)",
"P:LibreMetaverse.RLV.CameraSettings.AvDistMax": "self.native_av_dist_max()",
"P:LibreMetaverse.RLV.CameraSettings.AvDistMin": "self.native_av_dist_min()",
"P:LibreMetaverse.RLV.CameraSettings.CurrentFov": "self.native_current_fov()",
"P:LibreMetaverse.RLV.CameraSettings.FovMax": "self.native_fov_max()",
"P:LibreMetaverse.RLV.CameraSettings.FovMin": "self.native_fov_min()",
"P:LibreMetaverse.RLV.CameraSettings.ZoomMin": "self.native_zoom_min()",
"M:LibreMetaverse.RLV.EventArguments.RestrictionUpdatedEventArgs.#ctor(LibreMetaverse.RLV.RlvRestriction,System.Boolean,System.Boolean)":
"Self::native_new(restriction, is_new, is_deleted)",
"P:LibreMetaverse.RLV.EventArguments.RestrictionUpdatedEventArgs.IsDeleted": "self.native_is_deleted()",
"P:LibreMetaverse.RLV.EventArguments.RestrictionUpdatedEventArgs.IsNew": "self.native_is_new()",
"P:LibreMetaverse.RLV.EventArguments.RestrictionUpdatedEventArgs.Restriction": "self.native_restriction()",
"M:LibreMetaverse.RLV.InventoryMap.#ctor(LibreMetaverse.RLV.RlvSharedFolder,System.Collections.Generic.IReadOnlyCollection{LibreMetaverse.RLV.RlvInventoryItem})":
"Self::native_new(root, external_items)",
"M:LibreMetaverse.RLV.InventoryMap.FindFoldersContaining(System.Boolean,System.Nullable{System.Guid},System.Nullable{LibreMetaverse.RLV.RlvAttachmentPoint},System.Nullable{LibreMetaverse.RLV.RlvWearableType})":
"self.native_find_folders_containing(limit_to_one_result, attached_prim_id, attachment_point, wearable_type)",
"M:LibreMetaverse.RLV.InventoryMap.GetItemsByAttachmentPoint(LibreMetaverse.RLV.RlvAttachmentPoint)":
"self.native_get_items_by_attachment_point(attachment_point)",
"M:LibreMetaverse.RLV.InventoryMap.GetItemsById(System.Guid)": "self.native_get_items_by_id(item_id)",
"M:LibreMetaverse.RLV.InventoryMap.GetItemsByPrimId(System.Guid)": "self.native_get_items_by_prim_id(prim_id)",
"M:LibreMetaverse.RLV.InventoryMap.GetItemsByWearableType(LibreMetaverse.RLV.RlvWearableType)":
"self.native_get_items_by_wearable_type(wearable_type)",
"M:LibreMetaverse.RLV.InventoryMap.TryBuildPathToFolder(System.Guid,System.String@)":
"self.native_try_build_path_to_folder(folder_id, final_path)",
"M:LibreMetaverse.RLV.InventoryMap.TryGetFolderFromPath(System.String,System.Boolean,LibreMetaverse.RLV.RlvSharedFolder@)":
"self.native_try_get_folder_from_path(path, skip_private_folders, folder)",
"P:LibreMetaverse.RLV.InventoryMap.ExternalItems": "self.native_external_items()",
"P:LibreMetaverse.RLV.InventoryMap.Folders": "self.native_folders()",
"P:LibreMetaverse.RLV.InventoryMap.Items": "self.native_items()",
"P:LibreMetaverse.RLV.InventoryMap.Root": "self.native_root()",
"M:LibreMetaverse.RLV.LockedFolderPublic.ToString": "self.native_to_string()",
"P:LibreMetaverse.RLV.LockedFolderPublic.AttachExceptions": "self.native_attach_exceptions()",
"P:LibreMetaverse.RLV.LockedFolderPublic.AttachRestrictions": "self.native_attach_restrictions()",
"P:LibreMetaverse.RLV.LockedFolderPublic.CanAttach": "self.native_can_attach()",
"P:LibreMetaverse.RLV.LockedFolderPublic.CanDetach": "self.native_can_detach()",
"P:LibreMetaverse.RLV.LockedFolderPublic.DetachExceptions": "self.native_detach_exceptions()",
"P:LibreMetaverse.RLV.LockedFolderPublic.DetachRestrictions": "self.native_detach_restrictions()",
"P:LibreMetaverse.RLV.LockedFolderPublic.Id": "self.native_id()",
"P:LibreMetaverse.RLV.LockedFolderPublic.IsLocked": "self.native_is_locked()",
"P:LibreMetaverse.RLV.LockedFolderPublic.Name": "self.native_name()",
"M:LibreMetaverse.RLV.RlvBlacklist.BlacklistBehavior(System.String)": "self.native_blacklist_behavior(behavior)",
"M:LibreMetaverse.RLV.RlvBlacklist.GetBlacklist": "self.native_get_blacklist()",
"M:LibreMetaverse.RLV.RlvBlacklist.IsBlacklisted(System.String)": "self.native_is_blacklisted(behavior)",
"M:LibreMetaverse.RLV.RlvBlacklist.UnBlacklistBehavior(System.String)": "self.native_un_blacklist_behavior(behavior)",
"M:LibreMetaverse.RLV.RlvInventoryItem.#ctor(System.Guid,System.String,System.Boolean,System.Nullable{System.Guid},System.Nullable{LibreMetaverse.RLV.RlvAttachmentPoint},System.Nullable{System.Guid},System.Nullable{LibreMetaverse.RLV.RlvWearableType},System.Nullable{LibreMetaverse.RLV.RlvGestureState})":
"Self::native_new(id, name, is_link, external_folder_id, attached_to, attached_prim_id, worn_on, gesture_state)",
"M:LibreMetaverse.RLV.RlvInventoryItem.ToString": "self.native_to_string()",
"P:LibreMetaverse.RLV.RlvInventoryItem.AttachedPrimId": "self.native_attached_prim_id()",
"P:LibreMetaverse.RLV.RlvInventoryItem.AttachedPrimId#set": "self.native_set_attached_prim_id(value)",
"P:LibreMetaverse.RLV.RlvInventoryItem.AttachedTo": "self.native_attached_to()",
"P:LibreMetaverse.RLV.RlvInventoryItem.AttachedTo#set": "self.native_set_attached_to(value)",
"P:LibreMetaverse.RLV.RlvInventoryItem.Folder": "self.native_folder()",
"P:LibreMetaverse.RLV.RlvInventoryItem.FolderId": "self.native_folder_id()",
"P:LibreMetaverse.RLV.RlvInventoryItem.GestureState": "self.native_gesture_state()",
"P:LibreMetaverse.RLV.RlvInventoryItem.GestureState#set": "self.native_set_gesture_state(value)",
"P:LibreMetaverse.RLV.RlvInventoryItem.Id": "self.native_id()",
"P:LibreMetaverse.RLV.RlvInventoryItem.IsLink": "self.native_is_link()",
"P:LibreMetaverse.RLV.RlvInventoryItem.IsLink#set": "self.native_set_is_link(value)",
"P:LibreMetaverse.RLV.RlvInventoryItem.Name": "self.native_name()",
"P:LibreMetaverse.RLV.RlvInventoryItem.Name#set": "self.native_set_name(value)",
"P:LibreMetaverse.RLV.RlvInventoryItem.WornOn": "self.native_worn_on()",
"P:LibreMetaverse.RLV.RlvInventoryItem.WornOn#set": "self.native_set_worn_on(value)",
"E:LibreMetaverse.RLV.RlvRestrictionManager.RestrictionUpdated": "self.native_subscribe_restriction_updated(handler)",
"M:LibreMetaverse.RLV.RlvRestrictionManager.FindRestrictions(System.String,System.Nullable{System.Guid})":
"self.native_find_restrictions(behavior_name_filter, sender_filter)",
"M:LibreMetaverse.RLV.RlvRestrictionManager.GetLockedFolders": "self.native_get_locked_folders()",
"M:LibreMetaverse.RLV.RlvRestrictionManager.GetRestrictionsByType(LibreMetaverse.RLV.RlvRestrictionType)":
"self.native_get_restrictions_by_type(restriction_type)",
"M:LibreMetaverse.RLV.RlvRestrictionManager.GetTrackedPrimIds": "self.native_get_tracked_prim_ids()",
"M:LibreMetaverse.RLV.RlvRestrictionManager.RemoveRestrictionsForObjectsAsync(System.Collections.Generic.IEnumerable{System.Guid},System.Threading.CancellationToken)":
"self.native_remove_restrictions_for_objects(prim_ids, cancellation_token).await",
"M:LibreMetaverse.RLV.RlvRestrictionManager.TryGetLockedFolder(System.Guid,LibreMetaverse.RLV.LockedFolderPublic@)":
"self.native_try_get_locked_folder(folder_id, locked_folder)",
"M:LibreMetaverse.RLV.RlvSharedFolder.#ctor(System.Guid,System.String)": "Self::native_new(id, name)",
"M:LibreMetaverse.RLV.RlvSharedFolder.AddChild(System.Guid,System.String)": "self.native_add_child(id, name)",
"M:LibreMetaverse.RLV.RlvSharedFolder.AddItem(System.Guid,System.String,System.Boolean,System.Nullable{LibreMetaverse.RLV.RlvAttachmentPoint},System.Nullable{System.Guid},System.Nullable{LibreMetaverse.RLV.RlvWearableType},System.Nullable{LibreMetaverse.RLV.RlvGestureState})":
"self.native_add_item(id, name, is_link, attached_to, attached_prim_id, worn_on, gesture_state)",
"M:LibreMetaverse.RLV.RlvSharedFolder.ToString": "self.native_to_string()",
"P:LibreMetaverse.RLV.RlvSharedFolder.Children": "self.native_children()",
"P:LibreMetaverse.RLV.RlvSharedFolder.Id": "self.native_id()",
"P:LibreMetaverse.RLV.RlvSharedFolder.Items": "self.native_items()",
"P:LibreMetaverse.RLV.RlvSharedFolder.Name": "self.native_name()",
"P:LibreMetaverse.RLV.RlvSharedFolder.Name#set": "self.native_set_name(value)",
"P:LibreMetaverse.RLV.RlvSharedFolder.Parent": "self.native_parent()",
"P:LibreMetaverse.RLV.RlvSharedFolder.Parent#set": "self.native_set_parent(value)",
})
NATIVE_MEMBER_BODIES.update({
"M:LibreMetaverse.RLV.RlvPermissionsService.CanAllowIdle": "self.native_can_allow_idle()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanAlwaysRun": "self.native_can_always_run()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanAttach(LibreMetaverse.RLV.RlvInventoryItem,System.Boolean)":
"self.native_can_attach_with_item(item, is_shared)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanAttach(System.Nullable{System.Guid},System.Boolean,System.Nullable{LibreMetaverse.RLV.RlvAttachmentPoint},System.Nullable{LibreMetaverse.RLV.RlvWearableType})":
"self.native_can_attach(object_folder_id, is_shared, attachment_point, wearable_type)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanChat(System.Int32,System.String)":
"self.native_can_chat(channel, message)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanChatNormal": "self.native_can_chat_normal()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanChatShout": "self.native_can_chat_shout()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanChatWhisper": "self.native_can_chat_whisper()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanDefaultWear": "self.native_can_default_wear()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanDetach(LibreMetaverse.RLV.RlvInventoryItem)":
"self.native_can_detach_with_item(item)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanDetach(System.Nullable{System.Guid},System.Nullable{System.Guid},System.Nullable{System.Guid},System.Boolean,System.Nullable{LibreMetaverse.RLV.RlvAttachmentPoint},System.Nullable{LibreMetaverse.RLV.RlvWearableType})":
"self.native_can_detach(item_id, prim_id, folder_id, is_shared, attachment_point, wearable_type)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanEdit(LibreMetaverse.RLV.RlvPermissionsService.ObjectLocation,System.Nullable{System.Guid})":
"self.native_can_edit(object_location, object_id)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanEmote": "self.native_can_emote()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanFly": "self.native_can_fly()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanInteract": "self.native_can_interact()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanJump": "self.native_can_jump()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanReceiveChat(System.String,System.Guid)":
"self.native_can_receive_chat(message, user_id)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanReceiveIM(System.String,System.Nullable{System.Guid},System.String)":
"self.native_can_receive_im(message, user_id, group_name)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanRez": "self.native_can_rez()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSendChat": "self.native_can_send_chat()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSendGesture": "self.native_can_send_gesture()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSendIM(System.String,System.Nullable{System.Guid},System.String)":
"self.native_can_send_im(message, user_id, group_name)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSetDebug": "self.native_can_set_debug()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSetEnv": "self.native_can_set_env()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSetGroup": "self.native_can_set_group()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShare(System.Nullable{System.Guid})":
"self.native_can_share(user_id)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowHoverText(LibreMetaverse.RLV.RlvPermissionsService.HoverTextLocation,System.Nullable{System.Guid})":
"self.native_can_show_hover_text(location, object_id)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowInv": "self.native_can_show_inv()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowLoc": "self.native_can_show_loc()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowMiniMap": "self.native_can_show_mini_map()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowNameTags(System.Nullable{System.Guid})":
"self.native_can_show_name_tags(user_id)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowNames(System.Nullable{System.Guid})":
"self.native_can_show_names(user_id)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowNearby": "self.native_can_show_nearby()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanShowWorldMap": "self.native_can_show_world_map()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSit": "self.native_can_sit()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanSitTp(System.Single@)": "self.native_can_sit_tp(max_distance)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanStandTp": "self.native_can_stand_tp()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanStartIM(System.Guid)": "self.native_can_start_im(user_id)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTPLure(System.Nullable{System.Guid})":
"self.native_can_tp_lure(user_id)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTempRun": "self.native_can_temp_run()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTouch(LibreMetaverse.RLV.RlvPermissionsService.TouchLocation,System.Guid,System.Nullable{System.Guid},System.Nullable{System.Single})":
"self.native_can_touch(location, prim_id, user_id, distance)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTpLm": "self.native_can_tp_lm()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTpLoc": "self.native_can_tp_loc()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTpLocal(System.Single@)": "self.native_can_tp_local(max_distance)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanTpRequest(System.Nullable{System.Guid})":
"self.native_can_tp_request(user_id)",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanUnsit": "self.native_can_unsit()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanViewNote": "self.native_can_view_note()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanViewScript": "self.native_can_view_script()",
"M:LibreMetaverse.RLV.RlvPermissionsService.CanViewTexture": "self.native_can_view_texture()",
"M:LibreMetaverse.RLV.RlvPermissionsService.GetCameraRestrictions": "self.native_get_camera_restrictions()",
"M:LibreMetaverse.RLV.RlvPermissionsService.IsAutoAcceptPermissions": "self.native_is_auto_accept_permissions()",
"M:LibreMetaverse.RLV.RlvPermissionsService.IsAutoAcceptTp(System.Nullable{System.Guid})":
"self.native_is_auto_accept_tp(user_id)",
"M:LibreMetaverse.RLV.RlvPermissionsService.IsAutoAcceptTpRequest(System.Nullable{System.Guid})":
"self.native_is_auto_accept_tp_request(user_id)",
"M:LibreMetaverse.RLV.RlvPermissionsService.IsAutoDenyPermissions": "self.native_is_auto_deny_permissions()",
"M:LibreMetaverse.RLV.RlvPermissionsService.IsPermissive": "self.native_is_permissive()",
"M:LibreMetaverse.RLV.RlvPermissionsService.TryGetMaxFarTouchDistance(System.Single@)":
"self.native_try_get_max_far_touch_distance(max_distance)",
"M:LibreMetaverse.RLV.RlvPermissionsService.TryGetRedirChatChannels(System.Collections.Generic.IReadOnlyList{System.Int32}@)":
"self.native_try_get_redir_chat_channels(channels)",
"M:LibreMetaverse.RLV.RlvPermissionsService.TryGetRedirEmoteChannels(System.Collections.Generic.IReadOnlyList{System.Int32}@)":
"self.native_try_get_redir_emote_channels(channels)",
})
CLIENT_CORE_NATIVE_OWNERS = (
"AgentSettings",
"AssetCacheSettings",