Skip to content

Commit f7461a6

Browse files
committed
Fix temperature example
1 parent 5cbf369 commit f7461a6

File tree

1 file changed

+33
-14
lines changed

1 file changed

+33
-14
lines changed

datafusion-examples/examples/extension_types/temperature.rs

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,14 @@ fn create_session_context() -> Result<SessionContext> {
5151

5252
// The registration creates a new instance of the extension type with the deserialized metadata.
5353
let temp_registration =
54-
DefaultExtensionTypeRegistration::new_arc(|storage_type, metadata| {
55-
Ok(TemperatureExtensionType::new(
56-
storage_type.clone(),
57-
metadata,
58-
))
59-
});
54+
DefaultExtensionTypeRegistration::<TemperatureExtensionType>::new_arc(
55+
|storage_type, metadata| {
56+
Ok(Arc::new(TemperatureExtensionType::try_new(
57+
storage_type,
58+
metadata,
59+
)?))
60+
},
61+
);
6062
registry.add_extension_type_registration(temp_registration)?;
6163

6264
let state = SessionStateBuilder::default()
@@ -97,13 +99,25 @@ fn example_schema() -> SchemaRef {
9799
Arc::new(Schema::new(vec![
98100
Field::new("city", DataType::Utf8, false),
99101
Field::new("celsius", DataType::Float64, false).with_extension_type(
100-
TemperatureExtensionType::new(DataType::Float64, TemperatureUnit::Celsius),
102+
TemperatureExtensionType::try_new(
103+
&DataType::Float64,
104+
TemperatureUnit::Celsius,
105+
)
106+
.expect("Valid Type"),
101107
),
102108
Field::new("fahrenheit", DataType::Float64, false).with_extension_type(
103-
TemperatureExtensionType::new(DataType::Float64, TemperatureUnit::Fahrenheit),
109+
TemperatureExtensionType::try_new(
110+
&DataType::Float64,
111+
TemperatureUnit::Fahrenheit,
112+
)
113+
.expect("Valid Type"),
104114
),
105115
Field::new("kelvin", DataType::Float32, false).with_extension_type(
106-
TemperatureExtensionType::new(DataType::Float32, TemperatureUnit::Kelvin),
116+
TemperatureExtensionType::try_new(
117+
&DataType::Float32,
118+
TemperatureUnit::Kelvin,
119+
)
120+
.expect("Valid Type"),
107121
),
108122
]))
109123
}
@@ -144,11 +158,16 @@ pub struct TemperatureExtensionType {
144158

145159
impl TemperatureExtensionType {
146160
/// Creates a new [`TemperatureExtensionType`].
147-
pub fn new(storage_type: DataType, temperature_unit: TemperatureUnit) -> Self {
148-
Self {
149-
storage_type,
161+
pub fn try_new(
162+
storage_type: &DataType,
163+
temperature_unit: TemperatureUnit,
164+
) -> Result<Self> {
165+
let result = Self {
166+
storage_type: storage_type.clone(),
150167
temperature_unit,
151-
}
168+
};
169+
result.supports_data_type(&storage_type)?; // Validate the storage type
170+
Ok(result)
152171
}
153172
}
154173

@@ -212,7 +231,7 @@ impl ExtensionType for TemperatureExtensionType {
212231
data_type: &DataType,
213232
metadata: Self::Metadata,
214233
) -> std::result::Result<Self, ArrowError> {
215-
let instance = Self::new(data_type.clone(), metadata);
234+
let instance = Self::try_new(data_type, metadata)?;
216235
instance.supports_data_type(data_type)?;
217236
Ok(instance)
218237
}

0 commit comments

Comments
 (0)