diff --git a/crates/iceberg/src/catalog/mod.rs b/crates/iceberg/src/catalog/mod.rs
index 3457f83611..5cfbae2056 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,18 @@ 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;
+ /// Create a new catalog instance.
+ fn load(
+ self,
+ name: impl Into,
+ props: HashMap,
+ ) -> impl Future