summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCyborus <cyborus@cyborus.xyz>2024-02-09 23:39:06 +0100
committerCyborus <cyborus@cyborus.xyz>2024-02-09 23:39:06 +0100
commit945647baf102d31715ad7864b07df8ece50c152d (patch)
treee86de8a602db13c4348612dd4505a2c808f75f72
parentbetter document structs (diff)
downloadforgejo-api-945647baf102d31715ad7864b07df8ece50c152d.tar.xz
forgejo-api-945647baf102d31715ad7864b07df8ece50c152d.zip
generate subtypes and enums
-rw-r--r--generator/src/methods.rs3
-rw-r--r--generator/src/structs.rs47
-rw-r--r--src/generated.rs147
3 files changed, 194 insertions, 3 deletions
diff --git a/generator/src/methods.rs b/generator/src/methods.rs
index 064f40a..173ede5 100644
--- a/generator/src/methods.rs
+++ b/generator/src/methods.rs
@@ -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)?;
diff --git a/generator/src/structs.rs b/generator/src/structs.rs
index 45e2f71..1a01e6b 100644
--- a/generator/src/structs.rs
+++ b/generator/src/structs.rs
@@ -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)
}
diff --git a/src/generated.rs b/src/generated.rs
index a0fb4b5..5e81e7d 100644
--- a/src/generated.rs
+++ b/src/generated.rs
@@ -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)]
@@ -8790,6 +8886,18 @@ pub mod structs {
}
#[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 {}
/// IssueLabelsOption a collection of labels
@@ -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)]