Skip to content

Commit 51ec263

Browse files
authored
feat: Expose format field for measures/dimensions in meta (#9998)
1 parent 8398538 commit 51ec263

File tree

14 files changed

+419
-10
lines changed

14 files changed

+419
-10
lines changed

packages/cubejs-api-gateway/openspec.yml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ components:
143143
$ref: "#/components/schemas/V1CubeMetaDimensionGranularity"
144144
meta:
145145
type: "object"
146+
format:
147+
$ref: "#/components/schemas/V1CubeMetaDimensionFormat"
146148
V1CubeMetaMeasure:
147149
type: "object"
148150
required:
@@ -163,6 +165,8 @@ components:
163165
type: "string"
164166
meta:
165167
type: "object"
168+
format:
169+
$ref: "#/components/schemas/V1CubeMetaMeasureFormat"
166170
aliasMember:
167171
description: "When measure is defined in View, it keeps the original path: Cube.measure"
168172
type: "string"
@@ -263,6 +267,40 @@ components:
263267
enum:
264268
- "cube"
265269
- "view"
270+
V1CubeMetaMeasureFormat:
271+
type: "string"
272+
description: Format of measure
273+
enum:
274+
- "percent"
275+
- "currency"
276+
V1CubeMetaDimensionSimpleFormat:
277+
type: "string"
278+
description: Simple format of dimension
279+
enum:
280+
- "imageUrl"
281+
- "id"
282+
- "link"
283+
- "percent"
284+
- "currency"
285+
V1CubeMetaDimensionLinkFormat:
286+
type: "object"
287+
description: Link format for dimension with label and type
288+
properties:
289+
label:
290+
type: "string"
291+
description: Label for the link
292+
type:
293+
type: "string"
294+
enum: ["link"]
295+
description: Type of the format (must be 'link')
296+
required:
297+
- label
298+
- type
299+
V1CubeMetaDimensionFormat:
300+
oneOf:
301+
- $ref: "#/components/schemas/V1CubeMetaDimensionSimpleFormat"
302+
- $ref: "#/components/schemas/V1CubeMetaDimensionLinkFormat"
303+
description: Format of dimension - can be either a simple string format or an object with link configuration
266304
V1MetaResponse:
267305
type: "object"
268306
properties:

rust/cubesql/cubeclient/.openapi-generator/FILES

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@ src/lib.rs
33
src/models/mod.rs
44
src/models/v1_cube_meta.rs
55
src/models/v1_cube_meta_dimension.rs
6+
src/models/v1_cube_meta_dimension_format.rs
67
src/models/v1_cube_meta_dimension_granularity.rs
8+
src/models/v1_cube_meta_dimension_link_format.rs
9+
src/models/v1_cube_meta_dimension_simple_format.rs
710
src/models/v1_cube_meta_folder.rs
811
src/models/v1_cube_meta_hierarchy.rs
912
src/models/v1_cube_meta_join.rs
1013
src/models/v1_cube_meta_measure.rs
14+
src/models/v1_cube_meta_measure_format.rs
1115
src/models/v1_cube_meta_nested_folder.rs
1216
src/models/v1_cube_meta_segment.rs
1317
src/models/v1_cube_meta_type.rs

rust/cubesql/cubeclient/src/models/mod.rs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,16 @@ pub mod v1_cube_meta;
22
pub use self::v1_cube_meta::V1CubeMeta;
33
pub mod v1_cube_meta_dimension;
44
pub use self::v1_cube_meta_dimension::V1CubeMetaDimension;
5+
pub mod v1_cube_meta_dimension_format;
6+
pub use self::v1_cube_meta_dimension_format::V1CubeMetaDimensionFormat;
57
pub mod v1_cube_meta_dimension_granularity;
68
pub use self::v1_cube_meta_dimension_granularity::V1CubeMetaDimensionGranularity;
9+
pub mod v1_cube_meta_dimension_link_format;
10+
pub use self::v1_cube_meta_dimension_link_format::V1CubeMetaDimensionLinkFormat;
11+
// problem with code-gen, let's rename it as re-export
12+
pub use self::v1_cube_meta_dimension_link_format::Type as V1CubeMetaDimensionLinkFormatType;
13+
pub mod v1_cube_meta_dimension_simple_format;
14+
pub use self::v1_cube_meta_dimension_simple_format::V1CubeMetaDimensionSimpleFormat;
715
pub mod v1_cube_meta_folder;
816
pub use self::v1_cube_meta_folder::V1CubeMetaFolder;
917
pub mod v1_cube_meta_hierarchy;
@@ -12,15 +20,18 @@ pub mod v1_cube_meta_join;
1220
pub use self::v1_cube_meta_join::V1CubeMetaJoin;
1321
pub mod v1_cube_meta_measure;
1422
pub use self::v1_cube_meta_measure::V1CubeMetaMeasure;
23+
pub mod v1_cube_meta_measure_format;
24+
pub use self::v1_cube_meta_measure_format::V1CubeMetaMeasureFormat;
1525
pub mod v1_cube_meta_nested_folder;
16-
pub use self::v1_cube_meta_nested_folder::V1CubeMetaNestedFolder;
17-
pub use self::v1_cube_meta_nested_folder::V1CubeMetaNestedFolderMember;
26+
pub use self::v1_cube_meta_nested_folder::{V1CubeMetaNestedFolder, V1CubeMetaNestedFolderMember};
1827
pub mod v1_cube_meta_segment;
1928
pub use self::v1_cube_meta_segment::V1CubeMetaSegment;
2029
pub mod v1_cube_meta_type;
2130
pub use self::v1_cube_meta_type::V1CubeMetaType;
2231
pub mod v1_error;
2332
pub use self::v1_error::V1Error;
33+
pub mod v1_load_continue_wait;
34+
pub use self::v1_load_continue_wait::V1LoadContinueWait;
2435
pub mod v1_load_request;
2536
pub use self::v1_load_request::V1LoadRequest;
2637
pub mod v1_load_request_query;
@@ -37,6 +48,8 @@ pub mod v1_load_request_query_join_subquery;
3748
pub use self::v1_load_request_query_join_subquery::V1LoadRequestQueryJoinSubquery;
3849
pub mod v1_load_request_query_time_dimension;
3950
pub use self::v1_load_request_query_time_dimension::V1LoadRequestQueryTimeDimension;
51+
pub mod v1_load_request_query_time_dimension_date_range_filter;
52+
pub use self::v1_load_request_query_time_dimension_date_range_filter::V1LoadRequestQueryTimeDimensionDateRangeFilter;
4053
pub mod v1_load_response;
4154
pub use self::v1_load_response::V1LoadResponse;
4255
pub mod v1_load_result;
@@ -45,5 +58,3 @@ pub mod v1_load_result_annotation;
4558
pub use self::v1_load_result_annotation::V1LoadResultAnnotation;
4659
pub mod v1_meta_response;
4760
pub use self::v1_meta_response::V1MetaResponse;
48-
pub mod v1_load_continue_wait;
49-
pub use self::v1_load_continue_wait::V1LoadContinueWait;

rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ pub struct V1CubeMetaDimension {
3030
pub granularities: Option<Vec<models::V1CubeMetaDimensionGranularity>>,
3131
#[serde(rename = "meta", skip_serializing_if = "Option::is_none")]
3232
pub meta: Option<serde_json::Value>,
33+
#[serde(rename = "format", skip_serializing_if = "Option::is_none")]
34+
pub format: Option<Box<models::V1CubeMetaDimensionFormat>>,
3335
}
3436

3537
impl V1CubeMetaDimension {
@@ -43,6 +45,7 @@ impl V1CubeMetaDimension {
4345
alias_member: None,
4446
granularities: None,
4547
meta: None,
48+
format: None,
4649
}
4750
}
4851
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Cube.js
3+
*
4+
* Cube.js Swagger Schema
5+
*
6+
* The version of the OpenAPI document: 1.0.0
7+
*
8+
* Generated by: https://openapi-generator.tech
9+
*/
10+
11+
use crate::models;
12+
use serde::{Deserialize, Serialize};
13+
14+
/// V1CubeMetaDimensionFormat : Format of dimension - can be either a simple string format or an object with link configuration
15+
/// Format of dimension - can be either a simple string format or an object with link configuration
16+
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash, PartialOrd, Ord)]
17+
#[serde(untagged)]
18+
pub enum V1CubeMetaDimensionFormat {
19+
V1CubeMetaDimensionSimpleFormat(models::V1CubeMetaDimensionSimpleFormat),
20+
V1CubeMetaDimensionLinkFormat(Box<models::V1CubeMetaDimensionLinkFormat>),
21+
}
22+
23+
impl Default for V1CubeMetaDimensionFormat {
24+
fn default() -> Self {
25+
Self::V1CubeMetaDimensionSimpleFormat(Default::default())
26+
}
27+
}
28+
/// Type of the format (must be 'link')
29+
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
30+
pub enum Type {
31+
#[serde(rename = "link")]
32+
Link,
33+
}
34+
35+
impl Default for Type {
36+
fn default() -> Type {
37+
Self::Link
38+
}
39+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* Cube.js
3+
*
4+
* Cube.js Swagger Schema
5+
*
6+
* The version of the OpenAPI document: 1.0.0
7+
*
8+
* Generated by: https://openapi-generator.tech
9+
*/
10+
11+
use crate::models;
12+
use serde::{Deserialize, Serialize};
13+
14+
/// V1CubeMetaDimensionLinkFormat : Link format for dimension with label and type
15+
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize, Eq, Hash, PartialOrd, Ord)]
16+
pub struct V1CubeMetaDimensionLinkFormat {
17+
/// Label for the link
18+
#[serde(rename = "label")]
19+
pub label: String,
20+
/// Type of the format (must be 'link')
21+
#[serde(rename = "type")]
22+
pub r#type: Type,
23+
}
24+
25+
impl V1CubeMetaDimensionLinkFormat {
26+
/// Link format for dimension with label and type
27+
pub fn new(label: String, r#type: Type) -> V1CubeMetaDimensionLinkFormat {
28+
V1CubeMetaDimensionLinkFormat { label, r#type }
29+
}
30+
}
31+
/// Type of the format (must be 'link')
32+
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
33+
pub enum Type {
34+
#[serde(rename = "link")]
35+
Link,
36+
}
37+
38+
impl Default for Type {
39+
fn default() -> Type {
40+
Self::Link
41+
}
42+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Cube.js
3+
*
4+
* Cube.js Swagger Schema
5+
*
6+
* The version of the OpenAPI document: 1.0.0
7+
*
8+
* Generated by: https://openapi-generator.tech
9+
*/
10+
11+
use crate::models;
12+
use serde::{Deserialize, Serialize};
13+
14+
/// V1CubeMetaDimensionSimpleFormat : Simple format of dimension
15+
/// Simple format of dimension
16+
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
17+
pub enum V1CubeMetaDimensionSimpleFormat {
18+
#[serde(rename = "imageUrl")]
19+
ImageUrl,
20+
#[serde(rename = "id")]
21+
Id,
22+
#[serde(rename = "link")]
23+
Link,
24+
#[serde(rename = "percent")]
25+
Percent,
26+
#[serde(rename = "currency")]
27+
Currency,
28+
}
29+
30+
impl std::fmt::Display for V1CubeMetaDimensionSimpleFormat {
31+
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
32+
match self {
33+
Self::ImageUrl => write!(f, "imageUrl"),
34+
Self::Id => write!(f, "id"),
35+
Self::Link => write!(f, "link"),
36+
Self::Percent => write!(f, "percent"),
37+
Self::Currency => write!(f, "currency"),
38+
}
39+
}
40+
}
41+
42+
impl Default for V1CubeMetaDimensionSimpleFormat {
43+
fn default() -> V1CubeMetaDimensionSimpleFormat {
44+
Self::ImageUrl
45+
}
46+
}

rust/cubesql/cubeclient/src/models/v1_cube_meta_measure.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ pub struct V1CubeMetaMeasure {
2727
pub agg_type: Option<String>,
2828
#[serde(rename = "meta", skip_serializing_if = "Option::is_none")]
2929
pub meta: Option<serde_json::Value>,
30+
#[serde(rename = "format", skip_serializing_if = "Option::is_none")]
31+
pub format: Option<models::V1CubeMetaMeasureFormat>,
3032
/// When measure is defined in View, it keeps the original path: Cube.measure
3133
#[serde(rename = "aliasMember", skip_serializing_if = "Option::is_none")]
3234
pub alias_member: Option<String>,
@@ -42,6 +44,7 @@ impl V1CubeMetaMeasure {
4244
r#type,
4345
agg_type: None,
4446
meta: None,
47+
format: None,
4548
alias_member: None,
4649
}
4750
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Cube.js
3+
*
4+
* Cube.js Swagger Schema
5+
*
6+
* The version of the OpenAPI document: 1.0.0
7+
*
8+
* Generated by: https://openapi-generator.tech
9+
*/
10+
11+
use crate::models;
12+
use serde::{Deserialize, Serialize};
13+
14+
/// V1CubeMetaMeasureFormat : Format of measure
15+
/// Format of measure
16+
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
17+
pub enum V1CubeMetaMeasureFormat {
18+
#[serde(rename = "percent")]
19+
Percent,
20+
#[serde(rename = "currency")]
21+
Currency,
22+
}
23+
24+
impl std::fmt::Display for V1CubeMetaMeasureFormat {
25+
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
26+
match self {
27+
Self::Percent => write!(f, "percent"),
28+
Self::Currency => write!(f, "currency"),
29+
}
30+
}
31+
}
32+
33+
impl Default for V1CubeMetaMeasureFormat {
34+
fn default() -> V1CubeMetaMeasureFormat {
35+
Self::Percent
36+
}
37+
}

rust/cubesql/cubeclient/src/models/v1_load_request_query_time_dimension_date_range_filter.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
use serde::{Deserialize, Serialize};
22

33
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
4-
pub struct V1LoadRequestQueryTimeDimensionDateRangeFilter {
5-
}
4+
pub struct V1LoadRequestQueryTimeDimensionDateRangeFilter {}
65

76
impl V1LoadRequestQueryTimeDimensionDateRangeFilter {
87
pub fn new() -> V1LoadRequestQueryTimeDimensionDateRangeFilter {
9-
V1LoadRequestQueryTimeDimensionDateRangeFilter {
10-
}
8+
V1LoadRequestQueryTimeDimensionDateRangeFilter {}
9+
}
10+
}
11+
impl Default for V1LoadRequestQueryTimeDimensionDateRangeFilter {
12+
fn default() -> Self {
13+
Self::new()
1114
}
1215
}
13-
14-

0 commit comments

Comments
 (0)