How to rename enum variants?
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 38/100
Línea de trabajo
Read typify-impl/src/util.rs around line 756 and the build.rs settings using TypeSpacePatch::with_rename. Reproduce the schema generation shown in the issue; done means the generated Operator enum has unique valid Rust variant names and the project builds.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Hey,
I tried to use typify to create types from my json schema. Currently, I'm creating my types via build.rs.
Here you see the result, which is created:
///xx
///
/// <details><summary>JSON schema</summary>
///
/// ```json
///{
/// "description": "xx",
/// "type": "string",
/// "enum": [
/// "=",
/// "!=",
/// "in",
/// "out",
/// "<",
/// ">",
/// "<=",
/// ">=",
/// "contains"
/// ],
/// "example": "="
///}
/// ```
/// </details>
#[derive(
::serde::Deserialize,
::serde::Serialize,
Clone,
Copy,
Debug,
Eq,
Hash,
Ord,
PartialEq,
PartialOrd
)]
pub enum Operator {
#[serde(rename = "=")]
X,
#[serde(rename = "!=")]
X,
#[serde(rename = "in")]
In,
#[serde(rename = "out")]
Out,
#[serde(rename = "<")]
X,
#[serde(rename = ">")]
X,
#[serde(rename = "<=")]
X,
#[serde(rename = ">=")]
X,
#[serde(rename = "contains")]
Contains,
}
As you see, my enum (which I sadly cannot change) has values like "=", "!=" etc., which are invalid rust identifier. Therefor, typify will replace it with an capital X. The issue is now, that my enum have multiple variants which called X. Therefor, the following won't work as designed and by build fails:
impl ::std::fmt::Display
for CrmDiscountCustomerConditionsSelectionsItemConditionsItemOperator {
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
match *self {
Self::X => write!(f, "="),
Self::X => write!(f, "!="),
Self::In => write!(f, "in"),
Self::Out => write!(f, "out"),
Self::X => write!(f, "<"),
Self::X => write!(f, ">"),
Self::X => write!(f, "<="),
Self::X => write!(f, ">="),
Self::Contains => write!(f, "contains"),
}
}
}
How can I rename my enum variants? I tired the following:
let mut settings = TypeSpaceSettings::default();
settings.with_derive(String::from("PartialEq"));
settings.with_derive(String::from("Debug"));
settings.with_derive(String::from("Clone"));
settings.with_patch(
"Operator::=",
TypeSpacePatch::default().with_rename("OperatorEq".to_owned()),
);
let mut type_space = TypeSpace::new(&settings);
type_space.add_root_schema(schema).unwrap();
let output = prettyplease::unparse(&syn::parse2::<syn::File>(type_space.to_stream()).unwrap());
let mut out_file = std::path::Path::new(&out_dir).to_path_buf();
out_file.push("schema.rs");
std::fs::write(out_file, output).unwrap();
Thanks!
- Lenguaje dominante
- Rust
- Estrellas
- 907
- Forks
- 115
- Merge medio
- 20 h 24 min
- PR fusionados (30 d)
- 15
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: 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 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
oxidecomputer/typify#1075 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 50/100
oxidecomputer/typify#1060 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 48/100
oxidecomputer/typify#1059 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 65/100
oxidecomputer/typify#1022 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de oxidecomputer/typify
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
Los mantenedores suelen responder en 5 días
-
✨ enhancement needs-discussion
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
-
virtio-fs (Linux passthrough): debug log in do_lookup panics the fs worker on non-UTF-8 file namesPosiblemente ocupada @zcl-g5 la tomó hoy. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
Los mantenedores suelen responder en 2 días
-
docs(openclaw): RTK_REWRITE_HOST relaxes every default ask, not only commands no rule matchedAbiertoarea:docs documentation good first issue priority:low
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
rtk-ai/rtk#4500 · 1 comentario ·
Los mantenedores suelen responder en 1 día