diff --git a/crates/iceberg/src/catalog/mod.rs b/crates/iceberg/src/catalog/mod.rs
index 6a1572a4a..cf0340db3 100644
--- a/crates/iceberg/src/catalog/mod.rs
+++ b/crates/iceberg/src/catalog/mod.rs
@@ -19,6 +19,7 @@
use std::collections::HashMap;
use std::fmt::{Debug, Display};
+use std::future::Future;
use std::mem::take;
use std::ops::Deref;
@@ -96,6 +97,22 @@ pub trait Catalog: Debug + Sync + Send {
async fn update_table(&self, commit: TableCommit) -> Result
;
}
+/// Common interface for all catalog builders.
+pub trait CatalogBuilder: Default + Debug + Send + Sync {
+ /// The catalog type that this builder creates.
+ type C: Catalog;
+ /// Configure name of the catalog.
+ fn name(self, name: impl Into) -> Self;
+ /// Configure uri of the catalog.
+ fn uri(self, uri: impl Into) -> Self;
+ /// Configure warehouse location of the catalog.
+ fn warehouse(self, warehouse: impl Into) -> Self;
+ /// Configure properties of the catalog.
+ fn with_prop(self, key: impl Into, value: impl Into) -> Self;
+ /// Create the catalog
+ fn build(self) -> impl Future