Generate visual parameter and foliage catalogs (#48)
This commit is contained in:
@@ -10,6 +10,7 @@ publish = false
|
||||
|
||||
[dependencies]
|
||||
prettyplease = "0.2"
|
||||
roxmltree = "0.21.1"
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
serde_json = "1"
|
||||
sha2 = "0.11"
|
||||
|
||||
@@ -11,9 +11,13 @@ use std::fmt::Write as _;
|
||||
use std::fs;
|
||||
use std::path::{Component, Path, PathBuf};
|
||||
|
||||
mod xml_catalog;
|
||||
|
||||
pub const INVENTORY_PATH: &str = "codegen/sources.json";
|
||||
pub const MANIFEST_OUTPUT: &str = "codegen/generated/source_manifest.rs";
|
||||
pub const PACKET_OUTPUT: &str = "crates/libremetaverse/src/packet_catalog.rs";
|
||||
pub const VISUAL_OUTPUT: &str = "crates/libremetaverse/src/visual_catalog.rs";
|
||||
pub const FOLIAGE_OUTPUT: &str = "crates/libremetaverse/src/foliage_catalog.rs";
|
||||
pub const PUBLIC_API_PATH: &str = "api/public-api.json";
|
||||
const RUST_KEYWORDS: &[&str] = &[
|
||||
"as", "break", "const", "continue", "crate", "else", "enum", "extern", "false", "fn", "for",
|
||||
@@ -2043,6 +2047,14 @@ pub fn regenerate(root: &Path, check: bool) -> Result<(), String> {
|
||||
let outputs = [
|
||||
(root.join(MANIFEST_OUTPUT), source_manifest_bytes(root)?),
|
||||
(root.join(PACKET_OUTPUT), packet_catalog_bytes(root)?),
|
||||
(
|
||||
root.join(VISUAL_OUTPUT),
|
||||
xml_catalog::visual_catalog_bytes(root)?,
|
||||
),
|
||||
(
|
||||
root.join(FOLIAGE_OUTPUT),
|
||||
xml_catalog::foliage_catalog_bytes(root)?,
|
||||
),
|
||||
];
|
||||
if check {
|
||||
for (path, expected) in outputs {
|
||||
@@ -2077,6 +2089,16 @@ mod tests {
|
||||
let first_packets = packet_catalog_bytes(&root).expect("first packet generation");
|
||||
let second_packets = packet_catalog_bytes(&root).expect("second packet generation");
|
||||
assert_eq!(first_packets, second_packets);
|
||||
let first_visual =
|
||||
xml_catalog::visual_catalog_bytes(&root).expect("first visual generation");
|
||||
let second_visual =
|
||||
xml_catalog::visual_catalog_bytes(&root).expect("second visual generation");
|
||||
assert_eq!(first_visual, second_visual);
|
||||
let first_foliage =
|
||||
xml_catalog::foliage_catalog_bytes(&root).expect("first foliage generation");
|
||||
let second_foliage =
|
||||
xml_catalog::foliage_catalog_bytes(&root).expect("second foliage generation");
|
||||
assert_eq!(first_foliage, second_foliage);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
1104
tools/codegen/src/xml_catalog.rs
Normal file
1104
tools/codegen/src/xml_catalog.rs
Normal file
File diff suppressed because it is too large
Load Diff
@@ -39,6 +39,9 @@ TARGETS = {
|
||||
# the hand-written type so coverage remains deterministic.
|
||||
NATIVE_TYPES = {
|
||||
"T:LibreMetaverse.BitPack": "crate::bit_pack::BitPack",
|
||||
"T:LibreMetaverse.DrivenParamInfo": "crate::visual_catalog::DrivenParamInfo",
|
||||
"T:LibreMetaverse.GrassDefinition": "crate::foliage_catalog::GrassDefinition",
|
||||
"T:LibreMetaverse.GrassDefinitions": "crate::foliage_catalog::GrassDefinitions",
|
||||
"T:LibreMetaverse.Packets.PacketType": "crate::packet_catalog::PacketType",
|
||||
"T:LibreMetaverse.PrimMesher.Coord": "crate::prim_mesher::Coord",
|
||||
"T:LibreMetaverse.PrimMesher.Face": "crate::prim_mesher::Face",
|
||||
@@ -100,6 +103,14 @@ NATIVE_TYPES = {
|
||||
"T:LibreMetaverse.Vector3d": "crate::vectors::Vector3d",
|
||||
"T:LibreMetaverse.Vector4": "crate::vectors::Vector4",
|
||||
"T:LibreMetaverse.Utils": "crate::utils::Utils",
|
||||
"T:LibreMetaverse.SkeletalBoneInfo": "crate::visual_catalog::SkeletalBoneInfo",
|
||||
"T:LibreMetaverse.TreeDefinition": "crate::foliage_catalog::TreeDefinition",
|
||||
"T:LibreMetaverse.TreeDefinitions": "crate::foliage_catalog::TreeDefinitions",
|
||||
"T:LibreMetaverse.VisualAlphaParam": "crate::visual_catalog::VisualAlphaParam",
|
||||
"T:LibreMetaverse.VisualColorParam": "crate::visual_catalog::VisualColorParam",
|
||||
"T:LibreMetaverse.VisualParam": "crate::visual_catalog::VisualParam",
|
||||
"T:LibreMetaverse.VisualParams": "crate::visual_catalog::VisualParams",
|
||||
"T:LibreMetaverse.VolumeMorphInfo": "crate::visual_catalog::VolumeMorphInfo",
|
||||
}
|
||||
|
||||
# Native declarations whose cataloged method implementations are still emitted
|
||||
@@ -110,6 +121,22 @@ NATIVE_DECLARATIONS = {
|
||||
}
|
||||
|
||||
NATIVE_MEMBER_BODIES = {
|
||||
"M:LibreMetaverse.Avatar.#ctor":
|
||||
"crate::visual_catalog::new_avatar()",
|
||||
"M:LibreMetaverse.Avatar.DecodeVisualParams":
|
||||
"Ok(crate::visual_catalog::decode_visual_params(&self.visual_parameters))",
|
||||
"M:LibreMetaverse.AvatarAppearanceEventArgs.#ctor(LibreMetaverse.Simulator,LibreMetaverse.UUID,System.Boolean,LibreMetaverse.Primitive.TextureEntryFace,LibreMetaverse.Primitive.TextureEntryFace[],System.Collections.Generic.List{System.Byte},System.Byte,System.Int32,LibreMetaverse.AppearanceFlags,System.Int32)":
|
||||
"Ok(Self { stored_visual_params: visual_params })",
|
||||
"M:LibreMetaverse.AvatarAppearanceEventArgs.DecodeVisualParams":
|
||||
"Ok(crate::visual_catalog::decode_visual_params(&self.stored_visual_params))",
|
||||
"P:LibreMetaverse.AvatarAppearanceEventArgs.VisualParams":
|
||||
"self.stored_visual_params.clone()",
|
||||
"M:LibreMetaverse.Primitive.GetGrassDefinition":
|
||||
"crate::foliage_catalog::grass_by_id(self.prim_data.state)",
|
||||
"M:LibreMetaverse.Primitive.GetTreeDefinition":
|
||||
"crate::foliage_catalog::TreeDefinitions::get(self.tree_species)",
|
||||
"M:LibreMetaverse.Primitive.TextureEntryFace.#ctor(LibreMetaverse.Primitive.TextureEntryFace)":
|
||||
"crate::visual_catalog::new_texture_entry_face()",
|
||||
"M:LibreMetaverse.StructuredData.OSDParser.BufferCharactersEqual(System.IO.StringReader,System.Char[],System.Int32)":
|
||||
"crate::notation::buffer_characters_equal(reader, buffer, offset)",
|
||||
"M:LibreMetaverse.StructuredData.OSDParser.ConsumeBytes(System.IO.Stream,System.Int32)":
|
||||
@@ -554,6 +581,7 @@ UNDERLYING = {
|
||||
}
|
||||
|
||||
PRIVATE_LAYOUTS = {
|
||||
"T:LibreMetaverse.AvatarAppearanceEventArgs": [("stored_visual_params", "Vec<u8>")],
|
||||
"T:LibreMetaverse.CacheDictionary`2": [("entries", "std::collections::HashMap<TKey, TValue>")],
|
||||
"T:LibreMetaverse.DoubleDictionary`3": [
|
||||
("by_first", "std::collections::HashMap<TKey1, TValue>"),
|
||||
|
||||
@@ -982,12 +982,16 @@ def validate_generated_shims() -> None:
|
||||
"crate::byte_order::",
|
||||
"crate::binary::",
|
||||
"crate::dispatch::",
|
||||
"crate::foliage_catalog::",
|
||||
"crate::json_codec::",
|
||||
"crate::message_codec::",
|
||||
"crate::notation::",
|
||||
"crate::packet_catalog::",
|
||||
"crate::packet_wire::",
|
||||
"crate::protobuf::",
|
||||
"crate::visual_catalog::",
|
||||
"crate::xml_codec::",
|
||||
"stored_visual_params",
|
||||
)
|
||||
):
|
||||
raise ValueError(f"generated shim function does not use the standardized failure: {path.relative_to(ROOT)}")
|
||||
|
||||
Reference in New Issue
Block a user