1
0
Fork 0

generate subtypes and enums

This commit is contained in:
Cyborus 2024-02-09 17:39:06 -05:00
parent 4d63cd09c1
commit 945647baf1
No known key found for this signature in database
3 changed files with 194 additions and 3 deletions

View file

@ -103,8 +103,7 @@ fn method_docs(spec: &OpenApiV2, op: &Operation) -> eyre::Result<String> {
for param in params {
let param = param.deref(spec)?;
match &param._in {
ParameterIn::Path { param: _ }
| ParameterIn::FormData { param: _ } => {
ParameterIn::Path { param: _ } | ParameterIn::FormData { param: _ } => {
write!(&mut out, "/// - `{}`", param.name)?;
if let Some(description) = &param.description {
write!(&mut out, ": {}", description)?;

View file

@ -39,6 +39,14 @@ pub fn create_struct_for_definition(
return Ok(String::new());
}
if schema._type == Some(SchemaType::One(Primitive::String)) {
if let Some(_enum) = &schema._enum {
return create_enum(name, schema);
}
}
let mut subtypes = Vec::new();
let docs = create_struct_docs(schema)?;
let mut fields = String::new();
let required = schema.required.as_deref().unwrap_or_default();
@ -84,6 +92,17 @@ pub fn create_struct_for_definition(
fields.push_str(": ");
fields.push_str(&field_ty);
fields.push_str(",\n");
if let MaybeRef::Value { value } = &prop_schema {
if value._type == Some(SchemaType::One(Primitive::Object))
|| (value._type == Some(SchemaType::One(Primitive::String))
&& value._enum.is_some())
{
let name = format!("{name}{}", prop_name.to_pascal_case());
let subtype = create_struct_for_definition(spec, &name, value)?;
subtypes.push(subtype);
}
}
}
}
@ -95,7 +114,33 @@ pub fn create_struct_for_definition(
fields.push_str(">,\n");
}
let out = format!("{docs}#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]\npub struct {name} {{\n{fields}}}\n\n");
let mut out = format!("{docs}#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]\npub struct {name} {{\n{fields}}}\n\n");
for subtype in subtypes {
out.push_str(&subtype);
}
Ok(out)
}
fn create_enum(name: &str, schema: &Schema) -> eyre::Result<String> {
let _enum = schema
._enum
.as_deref()
.ok_or_else(|| eyre::eyre!("cannot create enum from non-enum schema"))?;
let mut variants = String::new();
let docs = create_struct_docs(schema)?;
for variant in _enum {
match variant {
serde_json::Value::String(s) => {
let variant_name = s.to_pascal_case();
variants.push_str(&variant_name);
variants.push_str(",\n");
}
x => eyre::bail!("cannot create enum variant. expected string, got {x:?}"),
}
}
let out = format!("{docs}#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]\npub enum {name} {{\n{variants}}}\n\n");
Ok(out)
}

View file

@ -7407,6 +7407,15 @@ pub mod structs {
pub sha: Option<String>,
}
/// indicates what to do with the file
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum ChangeFileOperationOperation {
Create,
Update,
Delete,
}
/// ChangeFilesOptions options for creating, updating or deleting multiple files
///
/// Note: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)
@ -7738,6 +7747,21 @@ pub mod structs {
pub r#type: String,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum CreateHookOptionType {
Forgejo,
Dingtalk,
Discord,
Gitea,
Gogs,
Msteams,
Slack,
Telegram,
Feishu,
Wechatwork,
Packagist,
}
/// CreateHookOptionConfig has all config options in it
///
/// required are "content_type" and "url" Required
@ -7817,6 +7841,12 @@ pub mod structs {
pub title: Option<String>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum CreateMilestoneOptionState {
Open,
Closed,
}
/// CreateOAuth2ApplicationOptions holds options to create an oauth2 application
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
@ -7851,6 +7881,15 @@ pub mod structs {
pub website: Option<String>,
}
/// possible values are `public` (default), `limited` or `private`
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum CreateOrgOptionVisibility {
Public,
Limited,
Private,
}
/// CreatePullRequestOption options when creating a pull request
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
@ -7953,6 +7992,16 @@ pub mod structs {
pub trust_model: Option<String>,
}
/// TrustModel of the repository
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum CreateRepoOptionTrustModel {
Default,
Collaborator,
Committer,
Collaboratorcommitter,
}
/// CreateStatusOption holds the information needed to create a new CommitStatus for a Commit
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
@ -7986,6 +8035,19 @@ pub mod structs {
pub units_map: Option<serde_json::Map<String, serde_json::Value>>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum CreateTeamOptionPermission {
Read,
Write,
Admin,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct CreateTeamOptionUnitsMap {
#[serde(flatten)]
pub additional: std::collections::BTreeMap<String, String>,
}
/// CreateUserOption create user options
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
@ -8166,6 +8228,12 @@ pub mod structs {
pub events: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct EditHookOptionConfig {
#[serde(flatten)]
pub additional: std::collections::BTreeMap<String, String>,
}
/// EditIssueCommentOption options for editing a comment
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
@ -8233,6 +8301,15 @@ pub mod structs {
pub website: Option<String>,
}
/// possible values are `public`, `limited` or `private`
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum EditOrgOptionVisibility {
Public,
Limited,
Private,
}
/// EditPullRequestOption options when modify pull request
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
@ -8377,6 +8454,19 @@ pub mod structs {
pub units_map: Option<serde_json::Map<String, serde_json::Value>>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum EditTeamOptionPermission {
Read,
Write,
Admin,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct EditTeamOptionUnitsMap {
#[serde(flatten)]
pub additional: std::collections::BTreeMap<String, String>,
}
/// EditUserOption edit user options
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
@ -8689,6 +8779,12 @@ pub mod structs {
pub updated_at: Option<time::OffsetDateTime>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct HookConfig {
#[serde(flatten)]
pub additional: std::collections::BTreeMap<String, String>,
}
/// Identity for a person's identity like an author or committer
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
@ -8789,6 +8885,18 @@ pub mod structs {
pub validations: Option<serde_json::Map<String, serde_json::Value>>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct IssueFormFieldAttributes {
#[serde(flatten)]
pub additional: std::collections::BTreeMap<String, ()>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct IssueFormFieldValidations {
#[serde(flatten)]
pub additional: std::collections::BTreeMap<String, ()>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct IssueFormFieldType {}
@ -8975,6 +9083,15 @@ pub mod structs {
pub merge_when_checks_succeed: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum MergePullRequestOptionDo {
Merge,
Rebase,
RebaseMerge,
Squash,
ManuallyMerged,
}
/// MigrateRepoOptions options for migrating repository's
///
/// this is used to interact with api v1
@ -9007,6 +9124,18 @@ pub mod structs {
pub wiki: Option<bool>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum MigrateRepoOptionsService {
Git,
Github,
Gitea,
Gitlab,
Gogs,
Onedev,
Gitbucket,
Codebase,
}
/// Milestone milestone is a collection of issues on one repository
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
@ -9049,6 +9178,9 @@ pub mod structs {
pub version: Option<String>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct NodeInfoMetadata {}
/// NodeInfoServices contains the third party sites this server can connect to via their application API
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
@ -9688,6 +9820,21 @@ pub mod structs {
pub units_map: Option<serde_json::Map<String, serde_json::Value>>,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub enum TeamPermission {
None,
Read,
Write,
Admin,
Owner,
}
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
pub struct TeamUnitsMap {
#[serde(flatten)]
pub additional: std::collections::BTreeMap<String, String>,
}
/// TimeStamp defines a timestamp
///
#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)]