Getting empty enum with allOf of oneOfs
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza rastreando el trabajo de procesamiento y combinación de esquemas mencionado en el issue 856, y compara la corrección relacionada del issue 829 con el esquema MyStruct proporcionado y la salida de Rust generada. Se considera terminado cuando esta combinación de allOf/oneOf ya no produce un enum vacío, usando serde(flatten) cuando la representación resultante lo permita.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Getting empty enum with allOfs of oneOfs
For this schema:
{
"openapi": "3.0.0",
"info": {
"title": "NEAR Protocol JSON RPC API",
"version": "1.1.2"
},
"paths": {},
"components": {
"schemas": {
"MyStruct": {
"allOf": [
{
"oneOf": [
{
"properties": {
"myfirsttag": {
"enum": [
"a"
],
"type": "string"
}
},
"required": [
"myfirsttag"
],
"type": "object"
},
{
"format": "uint64",
"minimum": 0,
"properties": {
"myfirsttag": {
"enum": [
"b"
],
"type": "string"
}
},
"required": [
"myfirsttag"
],
"type": "object"
}
]
},
{
"oneOf": [
{
"properties": {
"mysecondtag": {
"enum": [
"c"
],
"type": "string"
}
},
"required": [
"mysecondtag"
],
"type": "object"
},
{
"format": "uint64",
"minimum": 0,
"properties": {
"mysecondtag": {
"enum": [
"d"
],
"type": "string"
}
},
"required": [
"mysecondtag"
],
"type": "object"
}
]
}
],
"title": "MyStruct",
"type": "object"
}
}
}
}
The output is:
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum MyStruct {
Variant0(MyStructVariant0),
Variant1(MyStructVariant1),
}
#[derive(:: serde :: Deserialize, :: serde :: Serialize, Clone, Debug)]
#[serde(untagged)]
pub enum MyStructVariant0 {
Variant0(MyStructVariant0Variant0),
Variant1(MyStructVariant0Variant1),
}
#[serde(deny_unknown_fields)]
pub enum MyStructVariant0Variant0 {}
There was a similar issue https://github.com/oxidecomputer/typify/issues/829 which was successfully fixed. This thing is a more advanced.
@ahl here you mention the ongoing work "to separate out schema processing such as merging schemas". Is that going to help?
Use serde(flatten) whenever possible
I would create a second issue out of that for the following. But let it be here for now. I put it here as it may be connected
The previous schema is actually created from the rust code with schemars:
#[derive(JsonSchema)]
struct MyStruct {
#[serde(flatten)]
pub first_enum: MyFirstEnum,
#[serde(flatten)]
pub second_enum: MySecondEnum,
}
#[derive(JsonSchema)]
#[serde(tag = "myfirsttag", rename_all = "snake_case")]
enum MyFirstEnum {
A(String),
B(u64)
}
#[derive(JsonSchema)]
#[serde(tag = "mysecondtag", rename_all = "snake_case")]
enum MySecondEnum {
C(String),
D(u64)
}
So after that, I would say "let's use serde(flatten) whenever it's possible". For this case, it sounds reasonable. Firstly, it deduplicates the code. Secondly, it helps with naming. Though I am not sure if it's reasonable for the general case.
- Lenguaje dominante
- Rust
- Estrellas
- 898
- Forks
- 114
- Merge medio
- 4 h 18 min
- PR fusionados (30 d)
- 14
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de oxidecomputer/typify
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
oxidecomputer/typify#1077 · 1 comentario ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
oxidecomputer/typify#1075 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 50/100
oxidecomputer/typify#1060 ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 48/100
oxidecomputer/typify#1059 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
oxidecomputer/typify#1022 · 1 comentario ·
Todos los issues de oxidecomputer/typify
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
TheLarkInn/aipm#2413 ·
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
alexgorbatchev/simple-ptt#15 ·
-
tooling
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
todo:ticket
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
taikoxyz/taiko-mono#22168 · 1 comentario ·