Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Specifying default value for an object should use object's existing default field values

Abierto
#662 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
42/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
rust
Área
compilers

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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de oxidecomputer/typify

Todos los issues de oxidecomputer/typify

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.