xiaoyang-sde commented on issue #88:
URL: https://github.com/apache/iceberg-rust/issues/88#issuecomment-1829169593
Hi! I'm learning Apache Iceberg and I think this issue might be a good
starting point to learn about the source code.
I noticed that `PartitionSpec`, `Snapshot`, and `SortOrder` are still using
the `derive_build` macros, and I figured out a solution to migrate them to
`TypedBuilder`.
- `Snapshot` is straightforward:
```diff
-#[derive(Debug, PartialEq, Eq, Clone, Builder, Serialize, Deserialize)]
+#[derive(Debug, PartialEq, Eq, Clone, TypedBuilder, Serialize, Deserialize)]
#[serde(from = "SnapshotV2", into = "SnapshotV2")]
-#[builder(setter(prefix = "with"))]
+#[builder(field_defaults(setter(prefix = "with_")))]
/// A snapshot represents the state of a table at some time and is used to
access the complete set of data files in the table.
pub struct Snapshot {
/// A unique long ID
snapshot_id: i64,
/// The snapshot ID of the snapshot’s parent.
/// Omitted for any snapshot with no parent
- #[builder(default = "None")]
+ #[builder(default = None)]
parent_snapshot_id: Option<i64>,
/// A monotonically increasing long that tracks the order of
/// changes to a table.
@@ -82,7 +83,7 @@ pub struct Snapshot {
/// A string map that summarizes the snapshot changes, including
operation.
summary: Summary,
/// ID of the table’s current schema when the snapshot was created.
- #[builder(setter(strip_option), default = "None")]
+ #[builder(setter(strip_option), default = None)]
schema_id: Option<i64>,
}
```
- `PartitionSpec` is a bit complex, because we need to explicitly define the
`with_fields` and `with_partition_field` methods
```diff
-#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, Default,
Builder)]
+#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, Default,
TypedBuilder)]
#[serde(rename_all = "kebab-case")]
-#[builder(setter(prefix = "with"))]
+#[builder(field_defaults(setter(prefix = "with_")))]
/// Partition spec that defines how to produce a tuple of partition values
from a record.
pub struct PartitionSpec {
/// Identifier for PartitionSpec
pub spec_id: i32,
/// Details of the partition spec
- #[builder(setter(each(name = "with_partition_field")))]
- pub fields: Vec<PartitionField>,
+ #[builder(mutators(
+ pub fn with_fields(self, fields: Vec<PartitionField>) {
+ self.fields.extend(fields)
+ }
+
+ pub fn with_partition_field(self, field: PartitionField) {
+ self.fields.push(field)
+ }
+ ), default, via_mutators)]
+ pub fields: Vec<PartitionField>,
}
```
- `SortOrder` is similar to `PartitionSpec`
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]