Specifying default value for an object should use object's existing default field values
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 42/100
Línea de trabajo
Empieza rastreando el Rust generado para los valores predeterminados de los objetos y las rutas existentes de generación y conversión de builders. Compara los valores predeterminados vacíos y parcialmente especificados con los ejemplos de SeparatorConfig; se considera terminado cuando se conservan los valores predeterminados de los campos anidados y las propiedades proporcionadas explícitamente los sobrescriben, mientras los valores generados siguen siendo válidos.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Let's say I have the following object definition in my schema:
"SeparatorConfig": {
"type": "object",
"additionalProperties": false,
"properties": {
"lineThickness": {
"type": "integer",
"default": 1
},
"lineColor": {
"type": [
"string",
"null"
],
"default": "#B2000000"
}
}
},
So SeparatorConfig has two properties, both of which have default values.
Elsewhere in another object I have a field of type SeparatorConfig, and I'd like to make the entire field optional such that it defaults to an object with the correct default field values as defined above.
I could in theory do the following:
"separator": {
"$ref": "#/definitions/SeparatorConfig",
"default": {}
},
However the resulting generated code which produces this default value is:
super::SeparatorConfig {
line_color: Default::default(),
line_thickness: Default::default(),
}
Which produces:
{
"line_color": null,
"line_thickness": 0
}
Rather than the desired default:
{
"line_color": "#B2000000",
"line_thickness": 1
}
A better implementation for creating the default SeparatorConfig struct would be to use the existing builders you already generate:
builder::SeparatorConfig::default().try_into().expect("default should be valid")
We would also have to use the builder functions for defaults which specify only some properties:
"separator": {
"$ref": "#/definitions/SeparatorConfig",
"default": { "lineThickness": 5 }
},
Could produce:
builder::SeparatorConfig::default()
.line_thickness(5_i64)
.try_into()
.expect("default should be valid")
rather than the current:
super::SeparatorConfig {
line_color: Default::default(),
line_thickness: 5_i64,
}
Overall this would make specifying default values for objects throughout a schema significantly easier.
The current alternatives are to either specify all the default field values at every level, duplicating a lot of default values (error prone), or not specifying defaults in the schema and manually constructing default structs in code when properties are None (cumbersome).
- Lenguaje dominante
- Rust
- Estrellas
- 898
- Forks
- 114
- Merge medio
- 13 h 19 min
- PR fusionados (30 d)
- 16
Preparar el entorno
Aún no hemos revisado los archivos de configuración de este proyecto. Empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
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
-
area:casework bug criticality:p3 triage:needs-implementation
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
registrystack/registry-stack#1623 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
leptos-rs/leptos#4885 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
longbridge/gpui-kit#3276 ·
Los mantenedores suelen responder en 1 día
-
A-Migration Guides D-Straightforward S-Ready-For-Implementation X-Uncontroversial
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
bevyengine/bevy-website#2607 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día