aboutsummaryrefslogtreecommitdiff
path: root/azalea-protocol/src/packets/config
diff options
context:
space:
mode:
authormat <27899617+mat-1@users.noreply.github.com>2024-11-27 19:31:40 -0600
committerGitHub <noreply@github.com>2024-11-27 19:31:40 -0600
commit08958c2278b15ebeac8a964f392ebb792e479b61 (patch)
tree4ae3664cea38d7fd1a8f1e95ed06fac04ffe519e /azalea-protocol/src/packets/config
parent139d77d3c2b0922fba5e9d4fa2bd9819d78bd773 (diff)
downloadazalea-drasl-08958c2278b15ebeac8a964f392ebb792e479b61.tar.xz
Refactor azalea-protocol (#190)
* start updating to 1.21.4 * fix block codegen and stop using block data from burger * rename packet related modules and structs to be simpler * ItemSlot -> ItemStack for more consistency with mojmap * .get() -> .into_packet() * simplify declare_state_packets by removing packet ids * rename read_from and write_into to azalea_read and azalea_write * rename McBufReadable and McBufWritable to AzaleaRead and AzaleaWrite * McBuf -> AzBuf * remove most uses of into_variant * update codegen and use resourcelocation names for packets * implement #[limit(i)] attribute for AzBuf derive macro * fixes for 1.21.4 * fix examples * update some physics code and fix ChatType * remove unused imports in codegen * re-add some things to migrate.py and update +mc version numbers automatically * downgrade to 1.21.3 lol
Diffstat (limited to 'azalea-protocol/src/packets/config')
-rw-r--r--azalea-protocol/src/packets/config/c_cookie_request.rs8
-rw-r--r--azalea-protocol/src/packets/config/c_custom_payload.rs10
-rw-r--r--azalea-protocol/src/packets/config/c_custom_report_details.rs9
-rw-r--r--azalea-protocol/src/packets/config/c_disconnect.rs8
-rw-r--r--azalea-protocol/src/packets/config/c_finish_configuration.rs5
-rw-r--r--azalea-protocol/src/packets/config/c_keep_alive.rs7
-rw-r--r--azalea-protocol/src/packets/config/c_ping.rs7
-rw-r--r--azalea-protocol/src/packets/config/c_registry_data.rs12
-rw-r--r--azalea-protocol/src/packets/config/c_reset_chat.rs5
-rw-r--r--azalea-protocol/src/packets/config/c_resource_pack.rs11
-rw-r--r--azalea-protocol/src/packets/config/c_resource_pack_pop.rs8
-rw-r--r--azalea-protocol/src/packets/config/c_resource_pack_push.rs13
-rw-r--r--azalea-protocol/src/packets/config/c_select_known_packs.rs9
-rw-r--r--azalea-protocol/src/packets/config/c_server_links.rs9
-rw-r--r--azalea-protocol/src/packets/config/c_store_cookie.rs9
-rw-r--r--azalea-protocol/src/packets/config/c_transfer.rs9
-rw-r--r--azalea-protocol/src/packets/config/c_update_enabled_features.rs8
-rw-r--r--azalea-protocol/src/packets/config/c_update_tags.rs74
-rwxr-xr-xazalea-protocol/src/packets/config/mod.rs36
-rw-r--r--azalea-protocol/src/packets/config/s_client_information.rs9
-rw-r--r--azalea-protocol/src/packets/config/s_cookie_response.rs9
-rw-r--r--azalea-protocol/src/packets/config/s_custom_payload.rs10
-rw-r--r--azalea-protocol/src/packets/config/s_finish_configuration.rs5
-rw-r--r--azalea-protocol/src/packets/config/s_keep_alive.rs7
-rw-r--r--azalea-protocol/src/packets/config/s_pong.rs7
-rw-r--r--azalea-protocol/src/packets/config/s_resource_pack.rs20
-rw-r--r--azalea-protocol/src/packets/config/s_select_known_packs.rs14
27 files changed, 338 insertions, 0 deletions
diff --git a/azalea-protocol/src/packets/config/c_cookie_request.rs b/azalea-protocol/src/packets/config/c_cookie_request.rs
new file mode 100644
index 00000000..4c57718d
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_cookie_request.rs
@@ -0,0 +1,8 @@
+use azalea_buf::AzBuf;
+use azalea_core::resource_location::ResourceLocation;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundCookieRequest {
+ pub key: ResourceLocation,
+}
diff --git a/azalea-protocol/src/packets/config/c_custom_payload.rs b/azalea-protocol/src/packets/config/c_custom_payload.rs
new file mode 100644
index 00000000..3432ac3a
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_custom_payload.rs
@@ -0,0 +1,10 @@
+use azalea_buf::AzBuf;
+use azalea_buf::UnsizedByteArray;
+use azalea_core::resource_location::ResourceLocation;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundCustomPayload {
+ pub identifier: ResourceLocation,
+ pub data: UnsizedByteArray,
+}
diff --git a/azalea-protocol/src/packets/config/c_custom_report_details.rs b/azalea-protocol/src/packets/config/c_custom_report_details.rs
new file mode 100644
index 00000000..5fa375d0
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_custom_report_details.rs
@@ -0,0 +1,9 @@
+use std::collections::HashMap;
+
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundCustomReportDetails {
+ pub details: HashMap<String, String>,
+}
diff --git a/azalea-protocol/src/packets/config/c_disconnect.rs b/azalea-protocol/src/packets/config/c_disconnect.rs
new file mode 100644
index 00000000..b59b318d
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_disconnect.rs
@@ -0,0 +1,8 @@
+use azalea_buf::AzBuf;
+use azalea_chat::FormattedText;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundDisconnect {
+ pub reason: FormattedText,
+}
diff --git a/azalea-protocol/src/packets/config/c_finish_configuration.rs b/azalea-protocol/src/packets/config/c_finish_configuration.rs
new file mode 100644
index 00000000..e3f3e5a5
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_finish_configuration.rs
@@ -0,0 +1,5 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundFinishConfiguration {}
diff --git a/azalea-protocol/src/packets/config/c_keep_alive.rs b/azalea-protocol/src/packets/config/c_keep_alive.rs
new file mode 100644
index 00000000..f0310c34
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_keep_alive.rs
@@ -0,0 +1,7 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundKeepAlive {
+ pub id: u64,
+}
diff --git a/azalea-protocol/src/packets/config/c_ping.rs b/azalea-protocol/src/packets/config/c_ping.rs
new file mode 100644
index 00000000..35b5c39c
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_ping.rs
@@ -0,0 +1,7 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundPing {
+ pub id: u32,
+}
diff --git a/azalea-protocol/src/packets/config/c_registry_data.rs b/azalea-protocol/src/packets/config/c_registry_data.rs
new file mode 100644
index 00000000..185de4c3
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_registry_data.rs
@@ -0,0 +1,12 @@
+use std::collections::HashMap;
+
+use azalea_buf::AzBuf;
+use azalea_core::resource_location::ResourceLocation;
+use azalea_protocol_macros::ClientboundConfigPacket;
+use simdnbt::owned::NbtCompound;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundRegistryData {
+ pub registry_id: ResourceLocation,
+ pub entries: HashMap<ResourceLocation, Option<NbtCompound>>,
+}
diff --git a/azalea-protocol/src/packets/config/c_reset_chat.rs b/azalea-protocol/src/packets/config/c_reset_chat.rs
new file mode 100644
index 00000000..273cb0fd
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_reset_chat.rs
@@ -0,0 +1,5 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundResetChat;
diff --git a/azalea-protocol/src/packets/config/c_resource_pack.rs b/azalea-protocol/src/packets/config/c_resource_pack.rs
new file mode 100644
index 00000000..63a59b5b
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_resource_pack.rs
@@ -0,0 +1,11 @@
+use azalea_buf::AzBuf;
+use azalea_chat::FormattedText;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundResourcePack {
+ pub url: String,
+ pub hash: String,
+ pub required: bool,
+ pub prompt: Option<FormattedText>,
+}
diff --git a/azalea-protocol/src/packets/config/c_resource_pack_pop.rs b/azalea-protocol/src/packets/config/c_resource_pack_pop.rs
new file mode 100644
index 00000000..f949a726
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_resource_pack_pop.rs
@@ -0,0 +1,8 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ClientboundConfigPacket;
+use uuid::Uuid;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundResourcePackPop {
+ pub id: Option<Uuid>,
+}
diff --git a/azalea-protocol/src/packets/config/c_resource_pack_push.rs b/azalea-protocol/src/packets/config/c_resource_pack_push.rs
new file mode 100644
index 00000000..6be5c709
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_resource_pack_push.rs
@@ -0,0 +1,13 @@
+use azalea_buf::AzBuf;
+use azalea_chat::FormattedText;
+use azalea_protocol_macros::ClientboundConfigPacket;
+use uuid::Uuid;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundResourcePackPush {
+ pub id: Uuid,
+ pub url: String,
+ pub hash: String,
+ pub required: bool,
+ pub prompt: Option<FormattedText>,
+}
diff --git a/azalea-protocol/src/packets/config/c_select_known_packs.rs b/azalea-protocol/src/packets/config/c_select_known_packs.rs
new file mode 100644
index 00000000..6a4f76db
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_select_known_packs.rs
@@ -0,0 +1,9 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+use super::s_select_known_packs::KnownPack;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundSelectKnownPacks {
+ pub known_packs: Vec<KnownPack>,
+}
diff --git a/azalea-protocol/src/packets/config/c_server_links.rs b/azalea-protocol/src/packets/config/c_server_links.rs
new file mode 100644
index 00000000..3420e592
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_server_links.rs
@@ -0,0 +1,9 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+use crate::common::server_links::ServerLinkEntry;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundServerLinks {
+ pub links: Vec<ServerLinkEntry>,
+}
diff --git a/azalea-protocol/src/packets/config/c_store_cookie.rs b/azalea-protocol/src/packets/config/c_store_cookie.rs
new file mode 100644
index 00000000..c52211ea
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_store_cookie.rs
@@ -0,0 +1,9 @@
+use azalea_buf::AzBuf;
+use azalea_core::resource_location::ResourceLocation;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundStoreCookie {
+ pub key: ResourceLocation,
+ pub payload: Vec<u8>,
+}
diff --git a/azalea-protocol/src/packets/config/c_transfer.rs b/azalea-protocol/src/packets/config/c_transfer.rs
new file mode 100644
index 00000000..332421d8
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_transfer.rs
@@ -0,0 +1,9 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundTransfer {
+ pub host: String,
+ #[var]
+ pub port: u32,
+}
diff --git a/azalea-protocol/src/packets/config/c_update_enabled_features.rs b/azalea-protocol/src/packets/config/c_update_enabled_features.rs
new file mode 100644
index 00000000..4529c757
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_update_enabled_features.rs
@@ -0,0 +1,8 @@
+use azalea_buf::AzBuf;
+use azalea_core::resource_location::ResourceLocation;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundUpdateEnabledFeatures {
+ pub features: Vec<ResourceLocation>,
+}
diff --git a/azalea-protocol/src/packets/config/c_update_tags.rs b/azalea-protocol/src/packets/config/c_update_tags.rs
new file mode 100644
index 00000000..678a5ccf
--- /dev/null
+++ b/azalea-protocol/src/packets/config/c_update_tags.rs
@@ -0,0 +1,74 @@
+use std::io::Cursor;
+use std::ops::Deref;
+use std::{collections::HashMap, io::Write};
+
+use azalea_buf::{AzBuf, AzaleaReadVar, AzaleaWriteVar, BufReadError};
+use azalea_buf::{AzaleaRead, AzaleaWrite};
+use azalea_core::resource_location::ResourceLocation;
+use azalea_protocol_macros::ClientboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)]
+pub struct ClientboundUpdateTags {
+ pub tags: TagMap,
+}
+
+#[derive(Clone, Debug)]
+pub struct Tags {
+ pub name: ResourceLocation,
+ pub elements: Vec<i32>,
+}
+
+#[derive(Clone, Debug)]
+pub struct TagMap(pub HashMap<ResourceLocation, Vec<Tags>>);
+
+impl AzaleaRead for TagMap {
+ fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
+ let length = u32::azalea_read_var(buf)? as usize;
+ let mut data = HashMap::with_capacity(length);
+ for _ in 0..length {
+ let tag_type = ResourceLocation::azalea_read(buf)?;
+ let tags_count = i32::azalea_read_var(buf)? as usize;
+ let mut tags_vec = Vec::with_capacity(tags_count);
+ for _ in 0..tags_count {
+ let tags = Tags::azalea_read(buf)?;
+ tags_vec.push(tags);
+ }
+ data.insert(tag_type, tags_vec);
+ }
+ Ok(TagMap(data))
+ }
+}
+
+impl AzaleaWrite for TagMap {
+ fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
+ (self.len() as u32).azalea_write_var(buf)?;
+ for (k, v) in &self.0 {
+ k.azalea_write(buf)?;
+ v.azalea_write(buf)?;
+ }
+ Ok(())
+ }
+}
+impl AzaleaRead for Tags {
+ fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> {
+ let name = ResourceLocation::azalea_read(buf)?;
+ let elements = Vec::<i32>::azalea_read_var(buf)?;
+ Ok(Tags { name, elements })
+ }
+}
+
+impl AzaleaWrite for Tags {
+ fn azalea_write(&self, buf: &mut impl Write) -> Result<(), std::io::Error> {
+ self.name.azalea_write(buf)?;
+ self.elements.azalea_write_var(buf)?;
+ Ok(())
+ }
+}
+
+impl Deref for TagMap {
+ type Target = HashMap<ResourceLocation, Vec<Tags>>;
+
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
diff --git a/azalea-protocol/src/packets/config/mod.rs b/azalea-protocol/src/packets/config/mod.rs
new file mode 100755
index 00000000..4eda0f03
--- /dev/null
+++ b/azalea-protocol/src/packets/config/mod.rs
@@ -0,0 +1,36 @@
+// NOTE: This file is generated automatically by codegen/packet.py.
+// Don't edit it directly!
+
+use azalea_protocol_macros::declare_state_packets;
+
+declare_state_packets!(ConfigPacket,
+ Clientbound => [
+ cookie_request,
+ custom_payload,
+ disconnect,
+ finish_configuration,
+ keep_alive,
+ ping,
+ reset_chat,
+ registry_data,
+ resource_pack_pop,
+ resource_pack_push,
+ store_cookie,
+ transfer,
+ update_enabled_features,
+ update_tags,
+ select_known_packs,
+ custom_report_details,
+ server_links,
+ ],
+ Serverbound => [
+ client_information,
+ cookie_response,
+ custom_payload,
+ finish_configuration,
+ keep_alive,
+ pong,
+ resource_pack,
+ select_known_packs,
+ ]
+);
diff --git a/azalea-protocol/src/packets/config/s_client_information.rs b/azalea-protocol/src/packets/config/s_client_information.rs
new file mode 100644
index 00000000..d58ce502
--- /dev/null
+++ b/azalea-protocol/src/packets/config/s_client_information.rs
@@ -0,0 +1,9 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ServerboundConfigPacket;
+
+use crate::common::client_information::ClientInformation;
+
+#[derive(Clone, Debug, AzBuf, ServerboundConfigPacket, PartialEq, Eq)]
+pub struct ServerboundClientInformation {
+ pub information: ClientInformation,
+}
diff --git a/azalea-protocol/src/packets/config/s_cookie_response.rs b/azalea-protocol/src/packets/config/s_cookie_response.rs
new file mode 100644
index 00000000..e932352f
--- /dev/null
+++ b/azalea-protocol/src/packets/config/s_cookie_response.rs
@@ -0,0 +1,9 @@
+use azalea_buf::AzBuf;
+use azalea_core::resource_location::ResourceLocation;
+use azalea_protocol_macros::ServerboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ServerboundConfigPacket)]
+pub struct ServerboundCookieResponse {
+ pub key: ResourceLocation,
+ pub payload: Option<Vec<u8>>,
+}
diff --git a/azalea-protocol/src/packets/config/s_custom_payload.rs b/azalea-protocol/src/packets/config/s_custom_payload.rs
new file mode 100644
index 00000000..f480985d
--- /dev/null
+++ b/azalea-protocol/src/packets/config/s_custom_payload.rs
@@ -0,0 +1,10 @@
+use azalea_buf::AzBuf;
+use azalea_buf::UnsizedByteArray;
+use azalea_core::resource_location::ResourceLocation;
+use azalea_protocol_macros::ServerboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ServerboundConfigPacket)]
+pub struct ServerboundCustomPayload {
+ pub identifier: ResourceLocation,
+ pub data: UnsizedByteArray,
+}
diff --git a/azalea-protocol/src/packets/config/s_finish_configuration.rs b/azalea-protocol/src/packets/config/s_finish_configuration.rs
new file mode 100644
index 00000000..a4d94fb1
--- /dev/null
+++ b/azalea-protocol/src/packets/config/s_finish_configuration.rs
@@ -0,0 +1,5 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ServerboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ServerboundConfigPacket)]
+pub struct ServerboundFinishConfiguration {}
diff --git a/azalea-protocol/src/packets/config/s_keep_alive.rs b/azalea-protocol/src/packets/config/s_keep_alive.rs
new file mode 100644
index 00000000..1986a4eb
--- /dev/null
+++ b/azalea-protocol/src/packets/config/s_keep_alive.rs
@@ -0,0 +1,7 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ServerboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ServerboundConfigPacket)]
+pub struct ServerboundKeepAlive {
+ pub id: u64,
+}
diff --git a/azalea-protocol/src/packets/config/s_pong.rs b/azalea-protocol/src/packets/config/s_pong.rs
new file mode 100644
index 00000000..50c012dd
--- /dev/null
+++ b/azalea-protocol/src/packets/config/s_pong.rs
@@ -0,0 +1,7 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ServerboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ServerboundConfigPacket)]
+pub struct ServerboundPong {
+ pub id: u32,
+}
diff --git a/azalea-protocol/src/packets/config/s_resource_pack.rs b/azalea-protocol/src/packets/config/s_resource_pack.rs
new file mode 100644
index 00000000..0822c723
--- /dev/null
+++ b/azalea-protocol/src/packets/config/s_resource_pack.rs
@@ -0,0 +1,20 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ServerboundConfigPacket;
+use uuid::Uuid;
+
+#[derive(Clone, Debug, AzBuf, ServerboundConfigPacket)]
+pub struct ServerboundResourcePack {
+ pub id: Uuid,
+ pub action: Action,
+}
+
+#[derive(AzBuf, Clone, Copy, Debug)]
+pub enum Action {
+ SuccessfullyLoaded = 0,
+ Declined = 1,
+ FailedDownload = 2,
+ Accepted = 3,
+ InvalidUrl = 4,
+ FailedReload = 5,
+ Discarded = 6,
+}
diff --git a/azalea-protocol/src/packets/config/s_select_known_packs.rs b/azalea-protocol/src/packets/config/s_select_known_packs.rs
new file mode 100644
index 00000000..320b5ca5
--- /dev/null
+++ b/azalea-protocol/src/packets/config/s_select_known_packs.rs
@@ -0,0 +1,14 @@
+use azalea_buf::AzBuf;
+use azalea_protocol_macros::ServerboundConfigPacket;
+
+#[derive(Clone, Debug, AzBuf, ServerboundConfigPacket)]
+pub struct ServerboundSelectKnownPacks {
+ pub known_packs: Vec<KnownPack>,
+}
+
+#[derive(Clone, Debug, AzBuf)]
+pub struct KnownPack {
+ pub namespace: String,
+ pub id: String,
+ pub version: String,
+}