diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json index d8b9678..8bfb4d2 100644 --- a/.cargo_vcs_info.json +++ b/.cargo_vcs_info.json @@ -1,6 +1,6 @@ { "git": { - "sha1": "c49e0c3fc6ec4b8821e2c28dad38e1ac04571b0b" + "sha1": "041a56ecea92e78400f8dea7dad2b7f9c175c22a" }, "path_in_vcs": "" } \ No newline at end of file diff --git a/.woodpecker/integration.yml b/.woodpecker/integration.yml index 9e100cd..c058601 100644 --- a/.woodpecker/integration.yml +++ b/.woodpecker/integration.yml @@ -4,12 +4,12 @@ steps: test: image: rust environment: - - "FORGEJO_API_CI_INSTANCE_URL=http://forgejo-testing:3000/" - - FORGEJO_API_CI_TOKEN=6eaba97c49d9f1bbe54f8975ea884af54826c9fe + FORGEJO_API_CI_INSTANCE_URL: http://forgejo-testing:3000/ + FORGEJO_API_CI_TOKEN: 6d727f8db0df8a2852c9dfd38dca6b830741c079 commands: - cargo test services: forgejo-testing: pull: true - image: code.cartoon-aa.xyz/cyborus/ci-forgejo:9.0.0 + image: code.cartoon-aa.xyz/cyborus/ci-forgejo:10.0.0 diff --git a/Cargo.toml b/Cargo.toml index 04d7e23..990cbf9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,7 +12,7 @@ [package] edition = "2021" name = "forgejo-api" -version = "0.5.0" +version = "0.6.0" build = false autolib = false autobins = false @@ -51,7 +51,7 @@ version = "1.6.0" version = "1.5.0" [dependencies.reqwest] -version = "0.11.18" +version = "0.12" features = [ "json", "multipart", @@ -93,7 +93,7 @@ version = "1.7.0" version = "0.6.9" [dev-dependencies.reqwest] -version = "0.11.18" +version = "0.12" features = ["cookies"] [dev-dependencies.tokio] diff --git a/Cargo.toml.orig b/Cargo.toml.orig index a4c0b88..9d4356a 100644 --- a/Cargo.toml.orig +++ b/Cargo.toml.orig @@ -1,7 +1,7 @@ workspace = { members = ["generator"] } [package] name = "forgejo-api" -version = "0.5.0" +version = "0.6.0" edition = "2021" license = "Apache-2.0 OR MIT" repository = "https://codeberg.org/Cyborus/forgejo-api" @@ -10,7 +10,7 @@ description = "Interface to Forgejo's Web API" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -reqwest = { version = "0.11.18", features = ["json", "multipart"] } +reqwest = { version = "0.12", features = ["json", "multipart"] } soft_assert = "0.1.1" thiserror = "1.0.43" tokio = { version = "1.29.1", features = ["net"] } @@ -24,5 +24,5 @@ zeroize = "1.7.0" [dev-dependencies] eyre = "0.6.9" -reqwest = { version = "0.11.18", features = ["cookies"] } +reqwest = { version = "0.12", features = ["cookies"] } tokio = { version = "1.29.1", features = ["net", "fs", "rt", "macros"] } diff --git a/src/generated/methods.rs b/src/generated/methods.rs index f49d61f..ff00cf2 100644 --- a/src/generated/methods.rs +++ b/src/generated/methods.rs @@ -93,11 +93,11 @@ impl crate::Forgejo { pub async fn admin_cron_list( &self, query: AdminCronListQuery, - ) -> Result<Vec<Cron>, ForgejoError> { + ) -> Result<(CronListHeaders, Vec<Cron>), ForgejoError> { let request = self.get(&format!("admin/cron?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -119,11 +119,11 @@ impl crate::Forgejo { pub async fn admin_get_all_emails( &self, query: AdminGetAllEmailsQuery, - ) -> Result<Vec<Email>, ForgejoError> { + ) -> Result<(EmailListHeaders, Vec<Email>), ForgejoError> { let request = self.get(&format!("admin/emails?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -133,11 +133,11 @@ impl crate::Forgejo { pub async fn admin_search_emails( &self, query: AdminSearchEmailsQuery, - ) -> Result<Vec<Email>, ForgejoError> { + ) -> Result<(EmailListHeaders, Vec<Email>), ForgejoError> { let request = self.get(&format!("admin/emails/search?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -147,11 +147,11 @@ impl crate::Forgejo { pub async fn admin_list_hooks( &self, query: AdminListHooksQuery, - ) -> Result<Vec<Hook>, ForgejoError> { + ) -> Result<(HookListHeaders, Vec<Hook>), ForgejoError> { let request = self.get(&format!("admin/hooks?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -217,21 +217,23 @@ impl crate::Forgejo { pub async fn admin_get_all_orgs( &self, query: AdminGetAllOrgsQuery, - ) -> Result<Vec<Organization>, ForgejoError> { + ) -> Result<(OrganizationListHeaders, Vec<Organization>), ForgejoError> { let request = self.get(&format!("admin/orgs?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } /// List the available quota groups - pub async fn admin_list_quota_groups(&self) -> Result<Vec<QuotaGroup>, ForgejoError> { + pub async fn admin_list_quota_groups( + &self, + ) -> Result<(QuotaGroupListHeaders, Vec<QuotaGroup>), ForgejoError> { let request = self.get("admin/quota/groups").build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -332,13 +334,13 @@ impl crate::Forgejo { pub async fn admin_list_users_in_quota_group( &self, quotagroup: &str, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self .get(&format!("admin/quota/groups/{quotagroup}/users")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -382,11 +384,13 @@ impl crate::Forgejo { } /// List the available quota rules - pub async fn admin_list_quota_rules(&self) -> Result<Vec<QuotaRuleInfo>, ForgejoError> { + pub async fn admin_list_quota_rules( + &self, + ) -> Result<(QuotaRuleInfoListHeaders, Vec<QuotaRuleInfo>), ForgejoError> { let request = self.get("admin/quota/rules").build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -528,11 +532,11 @@ impl crate::Forgejo { pub async fn admin_search_users( &self, query: AdminSearchUsersQuery, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self.get(&format!("admin/users?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -721,11 +725,13 @@ impl crate::Forgejo { } /// Returns a list of all gitignore templates - pub async fn list_gitignores_templates(&self) -> Result<Vec<String>, ForgejoError> { + pub async fn list_gitignores_templates( + &self, + ) -> Result<(GitignoreTemplateListHeaders, Vec<String>), ForgejoError> { let request = self.get("gitignore/templates").build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -746,11 +752,13 @@ impl crate::Forgejo { } /// Returns a list of all label templates - pub async fn list_label_templates(&self) -> Result<Vec<String>, ForgejoError> { + pub async fn list_label_templates( + &self, + ) -> Result<(LabelTemplateListHeaders, Vec<String>), ForgejoError> { let request = self.get("label/templates").build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -773,11 +781,11 @@ impl crate::Forgejo { /// Returns a list of all license templates pub async fn list_license_templates( &self, - ) -> Result<Vec<LicensesTemplateListEntry>, ForgejoError> { + ) -> Result<(LicenseTemplateListHeaders, Vec<LicensesTemplateListEntry>), ForgejoError> { let request = self.get("licenses").build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -850,11 +858,11 @@ impl crate::Forgejo { pub async fn notify_get_list( &self, query: NotifyGetListQuery, - ) -> Result<Vec<NotificationThread>, ForgejoError> { + ) -> Result<(NotificationThreadListHeaders, Vec<NotificationThread>), ForgejoError> { let request = self.get(&format!("notifications?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -864,11 +872,11 @@ impl crate::Forgejo { pub async fn notify_read_list( &self, query: NotifyReadListQuery, - ) -> Result<Vec<NotificationThread>, ForgejoError> { + ) -> Result<(NotificationThreadListHeaders, Vec<NotificationThread>), ForgejoError> { let request = self.put(&format!("notifications?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 205 => Ok(response.json().await?), + 205 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -935,11 +943,11 @@ impl crate::Forgejo { pub async fn org_get_all( &self, query: OrgGetAllQuery, - ) -> Result<Vec<Organization>, ForgejoError> { + ) -> Result<(OrganizationListHeaders, Vec<Organization>), ForgejoError> { let request = self.get(&format!("orgs?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1024,13 +1032,13 @@ impl crate::Forgejo { &self, org: &str, query: OrgListActionsSecretsQuery, - ) -> Result<Vec<Secret>, ForgejoError> { + ) -> Result<(SecretListHeaders, Vec<Secret>), ForgejoError> { let request = self .get(&format!("orgs/{org}/actions/secrets?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1080,13 +1088,13 @@ impl crate::Forgejo { &self, org: &str, query: GetOrgVariablesListQuery, - ) -> Result<Vec<ActionVariable>, ForgejoError> { + ) -> Result<(VariableListHeaders, Vec<ActionVariable>), ForgejoError> { let request = self .get(&format!("orgs/{org}/actions/variables?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1184,13 +1192,13 @@ impl crate::Forgejo { &self, org: &str, query: OrgListActivityFeedsQuery, - ) -> Result<Vec<Activity>, ForgejoError> { + ) -> Result<(ActivityFeedsListHeaders, Vec<Activity>), ForgejoError> { let request = self .get(&format!("orgs/{org}/activities/feeds?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1247,11 +1255,11 @@ impl crate::Forgejo { &self, org: &str, query: OrgListHooksQuery, - ) -> Result<Vec<Hook>, ForgejoError> { + ) -> Result<(HookListHeaders, Vec<Hook>), ForgejoError> { let request = self.get(&format!("orgs/{org}/hooks?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1331,11 +1339,11 @@ impl crate::Forgejo { &self, org: &str, query: OrgListLabelsQuery, - ) -> Result<Vec<Label>, ForgejoError> { + ) -> Result<(LabelListHeaders, Vec<Label>), ForgejoError> { let request = self.get(&format!("orgs/{org}/labels?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1415,13 +1423,13 @@ impl crate::Forgejo { &self, org: &str, query: OrgListBlockedUsersQuery, - ) -> Result<Vec<BlockedUser>, ForgejoError> { + ) -> Result<(BlockedUserListHeaders, Vec<BlockedUser>), ForgejoError> { let request = self .get(&format!("orgs/{org}/list_blocked?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1433,11 +1441,11 @@ impl crate::Forgejo { &self, org: &str, query: OrgListMembersQuery, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self.get(&format!("orgs/{org}/members?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1479,13 +1487,13 @@ impl crate::Forgejo { &self, org: &str, query: OrgListPublicMembersQuery, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self .get(&format!("orgs/{org}/public_members?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1562,13 +1570,13 @@ impl crate::Forgejo { &self, org: &str, query: OrgListQuotaArtifactsQuery, - ) -> Result<Vec<QuotaUsedArtifact>, ForgejoError> { + ) -> Result<(QuotaUsedArtifactListHeaders, Vec<QuotaUsedArtifact>), ForgejoError> { let request = self .get(&format!("orgs/{org}/quota/artifacts?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1580,13 +1588,13 @@ impl crate::Forgejo { &self, org: &str, query: OrgListQuotaAttachmentsQuery, - ) -> Result<Vec<QuotaUsedAttachment>, ForgejoError> { + ) -> Result<(QuotaUsedAttachmentListHeaders, Vec<QuotaUsedAttachment>), ForgejoError> { let request = self .get(&format!("orgs/{org}/quota/attachments?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1610,13 +1618,13 @@ impl crate::Forgejo { &self, org: &str, query: OrgListQuotaPackagesQuery, - ) -> Result<Vec<QuotaUsedPackage>, ForgejoError> { + ) -> Result<(QuotaUsedPackageListHeaders, Vec<QuotaUsedPackage>), ForgejoError> { let request = self .get(&format!("orgs/{org}/quota/packages?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1628,11 +1636,11 @@ impl crate::Forgejo { &self, org: &str, query: OrgListReposQuery, - ) -> Result<Vec<Repository>, ForgejoError> { + ) -> Result<(RepositoryListHeaders, Vec<Repository>), ForgejoError> { let request = self.get(&format!("orgs/{org}/repos?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1664,11 +1672,11 @@ impl crate::Forgejo { &self, org: &str, query: OrgListTeamsQuery, - ) -> Result<Vec<Team>, ForgejoError> { + ) -> Result<(TeamListHeaders, Vec<Team>), ForgejoError> { let request = self.get(&format!("orgs/{org}/teams?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1733,11 +1741,11 @@ impl crate::Forgejo { &self, owner: &str, query: ListPackagesQuery, - ) -> Result<Vec<Package>, ForgejoError> { + ) -> Result<(PackageListHeaders, Vec<Package>), ForgejoError> { let request = self.get(&format!("packages/{owner}?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1800,13 +1808,13 @@ impl crate::Forgejo { r#type: &str, name: &str, version: &str, - ) -> Result<Vec<PackageFile>, ForgejoError> { + ) -> Result<(PackageFileListHeaders, Vec<PackageFile>), ForgejoError> { let request = self .get(&format!("packages/{owner}/{type}/{name}/{version}/files")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1816,11 +1824,11 @@ impl crate::Forgejo { pub async fn issue_search_issues( &self, query: IssueSearchIssuesQuery, - ) -> Result<Vec<Issue>, ForgejoError> { + ) -> Result<(IssueListHeaders, Vec<Issue>), ForgejoError> { let request = self.get(&format!("repos/issues/search?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1928,13 +1936,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoListActionsSecretsQuery, - ) -> Result<Vec<Secret>, ForgejoError> { + ) -> Result<(SecretListHeaders, Vec<Secret>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/actions/secrets?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -1998,13 +2006,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: ListActionTasksQuery, - ) -> Result<ActionTaskResponse, ForgejoError> { + ) -> Result<(TasksListHeaders, ActionTaskResponse), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/actions/tasks?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -2018,13 +2026,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: GetRepoVariablesListQuery, - ) -> Result<Vec<ActionVariable>, ForgejoError> { + ) -> Result<(VariableListHeaders, Vec<ActionVariable>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/actions/variables?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -2166,13 +2174,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoListActivityFeedsQuery, - ) -> Result<Vec<Activity>, ForgejoError> { + ) -> Result<(ActivityFeedsListHeaders, Vec<Activity>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/activities/feeds?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -2206,13 +2214,13 @@ impl crate::Forgejo { &self, owner: &str, repo: &str, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/assignees")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -2262,13 +2270,13 @@ impl crate::Forgejo { &self, owner: &str, repo: &str, - ) -> Result<Vec<BranchProtection>, ForgejoError> { + ) -> Result<(BranchProtectionListHeaders, Vec<BranchProtection>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/branch_protections")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -2370,13 +2378,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoListBranchesQuery, - ) -> Result<Vec<Branch>, ForgejoError> { + ) -> Result<(BranchListHeaders, Vec<Branch>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/branches?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -2445,6 +2453,30 @@ impl crate::Forgejo { } } + /// Update a branch + /// + /// - `owner`: owner of the repo + /// - `repo`: name of the repo + /// - `branch`: name of the branch + /// - `body`: See [`UpdateBranchRepoOption`] + pub async fn repo_update_branch( + &self, + owner: &str, + repo: &str, + branch: &str, + body: UpdateBranchRepoOption, + ) -> Result<(), ForgejoError> { + let request = self + .patch(&format!("repos/{owner}/{repo}/branches/{branch}")) + .json(&body) + .build()?; + let response = self.execute(request).await?; + match response.status().as_u16() { + 204 => Ok(()), + _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), + } + } + /// List a repository's collaborators /// /// - `owner`: owner of the repo @@ -2454,13 +2486,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoListCollaboratorsQuery, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/collaborators?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -2615,7 +2647,7 @@ impl crate::Forgejo { repo: &str, r#ref: &str, query: RepoListStatusesByRefQuery, - ) -> Result<Vec<CommitStatus>, ForgejoError> { + ) -> Result<(CommitStatusListHeaders, Vec<CommitStatus>), ForgejoError> { let request = self .get(&format!( "repos/{owner}/{repo}/commits/{ref}/statuses?{query}" @@ -2623,7 +2655,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -2978,13 +3010,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: ListForksQuery, - ) -> Result<Vec<Repository>, ForgejoError> { + ) -> Result<(RepositoryListHeaders, Vec<Repository>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/forks?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -3101,6 +3133,51 @@ impl crate::Forgejo { } } + /// Set a note corresponding to a single commit from a repository + /// + /// - `owner`: owner of the repo + /// - `repo`: name of the repo + /// - `sha`: a git ref or commit sha + /// - `body`: See [`NoteOptions`] + pub async fn repo_set_note( + &self, + owner: &str, + repo: &str, + sha: &str, + body: NoteOptions, + ) -> Result<Note, ForgejoError> { + let request = self + .post(&format!("repos/{owner}/{repo}/git/notes/{sha}")) + .json(&body) + .build()?; + let response = self.execute(request).await?; + match response.status().as_u16() { + 200 => Ok(response.json().await?), + _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), + } + } + + /// Removes a note corresponding to a single commit from a repository + /// + /// - `owner`: owner of the repo + /// - `repo`: name of the repo + /// - `sha`: a git ref or commit sha + pub async fn repo_remove_note( + &self, + owner: &str, + repo: &str, + sha: &str, + ) -> Result<(), ForgejoError> { + let request = self + .delete(&format!("repos/{owner}/{repo}/git/notes/{sha}")) + .build()?; + let response = self.execute(request).await?; + match response.status().as_u16() { + 204 => Ok(()), + _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), + } + } + /// Get specified ref or filtered repository's refs /// /// - `owner`: owner of the repo @@ -3109,13 +3186,13 @@ impl crate::Forgejo { &self, owner: &str, repo: &str, - ) -> Result<Vec<Reference>, ForgejoError> { + ) -> Result<(ReferenceListHeaders, Vec<Reference>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/git/refs")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -3130,13 +3207,13 @@ impl crate::Forgejo { owner: &str, repo: &str, r#ref: &str, - ) -> Result<Vec<Reference>, ForgejoError> { + ) -> Result<(ReferenceListHeaders, Vec<Reference>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/git/refs/{ref}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -3193,13 +3270,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoListHooksQuery, - ) -> Result<Vec<Hook>, ForgejoError> { + ) -> Result<(HookListHeaders, Vec<Hook>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/hooks?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -3234,13 +3311,13 @@ impl crate::Forgejo { &self, owner: &str, repo: &str, - ) -> Result<Vec<GitHook>, ForgejoError> { + ) -> Result<(GitHookListHeaders, Vec<GitHook>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/hooks/git")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -3465,13 +3542,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: IssueListIssuesQuery, - ) -> Result<Vec<Issue>, ForgejoError> { + ) -> Result<(IssueListHeaders, Vec<Issue>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/issues?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -3507,13 +3584,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: IssueGetRepoCommentsQuery, - ) -> Result<Vec<Comment>, ForgejoError> { + ) -> Result<(CommentListHeaders, Vec<Comment>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/issues/comments?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -3596,13 +3673,13 @@ impl crate::Forgejo { owner: &str, repo: &str, id: u64, - ) -> Result<Vec<Attachment>, ForgejoError> { + ) -> Result<(AttachmentListHeaders, Vec<Attachment>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/issues/comments/{id}/assets")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -3729,7 +3806,7 @@ impl crate::Forgejo { owner: &str, repo: &str, id: u64, - ) -> Result<Vec<Reaction>, ForgejoError> { + ) -> Result<(ReactionListHeaders, Vec<Reaction>), ForgejoError> { let request = self .get(&format!( "repos/{owner}/{repo}/issues/comments/{id}/reactions" @@ -3737,7 +3814,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -3803,13 +3880,13 @@ impl crate::Forgejo { &self, owner: &str, repo: &str, - ) -> Result<Vec<Issue>, ForgejoError> { + ) -> Result<(IssueListHeaders, Vec<Issue>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/issues/pinned")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -3890,13 +3967,13 @@ impl crate::Forgejo { owner: &str, repo: &str, index: u64, - ) -> Result<Vec<Attachment>, ForgejoError> { + ) -> Result<(AttachmentListHeaders, Vec<Attachment>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/issues/{index}/assets")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -4024,7 +4101,7 @@ impl crate::Forgejo { repo: &str, index: &str, query: IssueListBlocksQuery, - ) -> Result<Vec<Issue>, ForgejoError> { + ) -> Result<(IssueListHeaders, Vec<Issue>), ForgejoError> { let request = self .get(&format!( "repos/{owner}/{repo}/issues/{index}/blocks?{query}" @@ -4032,7 +4109,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -4096,7 +4173,7 @@ impl crate::Forgejo { repo: &str, index: u64, query: IssueGetCommentsQuery, - ) -> Result<Vec<Comment>, ForgejoError> { + ) -> Result<(CommentListHeaders, Vec<Comment>), ForgejoError> { let request = self .get(&format!( "repos/{owner}/{repo}/issues/{index}/comments?{query}" @@ -4104,7 +4181,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -4222,7 +4299,7 @@ impl crate::Forgejo { repo: &str, index: &str, query: IssueListIssueDependenciesQuery, - ) -> Result<Vec<Issue>, ForgejoError> { + ) -> Result<(IssueListHeaders, Vec<Issue>), ForgejoError> { let request = self .get(&format!( "repos/{owner}/{repo}/issues/{index}/dependencies?{query}" @@ -4230,7 +4307,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -4293,13 +4370,13 @@ impl crate::Forgejo { owner: &str, repo: &str, index: u64, - ) -> Result<Vec<Label>, ForgejoError> { + ) -> Result<(LabelListHeaders, Vec<Label>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/issues/{index}/labels")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -4316,14 +4393,14 @@ impl crate::Forgejo { repo: &str, index: u64, body: IssueLabelsOption, - ) -> Result<Vec<Label>, ForgejoError> { + ) -> Result<(LabelListHeaders, Vec<Label>), ForgejoError> { let request = self .put(&format!("repos/{owner}/{repo}/issues/{index}/labels")) .json(&body) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -4340,14 +4417,14 @@ impl crate::Forgejo { repo: &str, index: u64, body: IssueLabelsOption, - ) -> Result<Vec<Label>, ForgejoError> { + ) -> Result<(LabelListHeaders, Vec<Label>), ForgejoError> { let request = self .post(&format!("repos/{owner}/{repo}/issues/{index}/labels")) .json(&body) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -4475,7 +4552,7 @@ impl crate::Forgejo { repo: &str, index: u64, query: IssueGetIssueReactionsQuery, - ) -> Result<Vec<Reaction>, ForgejoError> { + ) -> Result<(ReactionListHeaders, Vec<Reaction>), ForgejoError> { let request = self .get(&format!( "repos/{owner}/{repo}/issues/{index}/reactions?{query}" @@ -4483,7 +4560,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -4617,7 +4694,7 @@ impl crate::Forgejo { repo: &str, index: u64, query: IssueSubscriptionsQuery, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self .get(&format!( "repos/{owner}/{repo}/issues/{index}/subscriptions?{query}" @@ -4625,7 +4702,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -4716,7 +4793,7 @@ impl crate::Forgejo { repo: &str, index: u64, query: IssueGetCommentsAndTimelineQuery, - ) -> Result<Vec<TimelineComment>, ForgejoError> { + ) -> Result<(TimelineListHeaders, Vec<TimelineComment>), ForgejoError> { let request = self .get(&format!( "repos/{owner}/{repo}/issues/{index}/timeline?{query}" @@ -4724,7 +4801,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -4740,7 +4817,7 @@ impl crate::Forgejo { repo: &str, index: u64, query: IssueTrackedTimesQuery, - ) -> Result<Vec<TrackedTime>, ForgejoError> { + ) -> Result<(TrackedTimeListHeaders, Vec<TrackedTime>), ForgejoError> { let request = self .get(&format!( "repos/{owner}/{repo}/issues/{index}/times?{query}" @@ -4748,7 +4825,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -4830,13 +4907,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoListKeysQuery, - ) -> Result<Vec<DeployKey>, ForgejoError> { + ) -> Result<(DeployKeyListHeaders, Vec<DeployKey>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/keys?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -4914,13 +4991,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: IssueListLabelsQuery, - ) -> Result<Vec<Label>, ForgejoError> { + ) -> Result<(LabelListHeaders, Vec<Label>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/labels?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -5063,13 +5140,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: IssueGetMilestonesListQuery, - ) -> Result<Vec<Milestone>, ForgejoError> { + ) -> Result<(MilestoneListHeaders, Vec<Milestone>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/milestones?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -5205,13 +5282,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: NotifyGetRepoListQuery, - ) -> Result<Vec<NotificationThread>, ForgejoError> { + ) -> Result<(NotificationThreadListHeaders, Vec<NotificationThread>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/notifications?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -5225,33 +5302,33 @@ impl crate::Forgejo { owner: &str, repo: &str, query: NotifyReadRepoListQuery, - ) -> Result<Vec<NotificationThread>, ForgejoError> { + ) -> Result<(NotificationThreadListHeaders, Vec<NotificationThread>), ForgejoError> { let request = self .put(&format!("repos/{owner}/{repo}/notifications?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 205 => Ok(response.json().await?), + 205 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } /// List a repo's pull requests /// - /// - `owner`: owner of the repo - /// - `repo`: name of the repo + /// - `owner`: Owner of the repo + /// - `repo`: Name of the repo pub async fn repo_list_pull_requests( &self, owner: &str, repo: &str, query: RepoListPullRequestsQuery, - ) -> Result<Vec<PullRequest>, ForgejoError> { + ) -> Result<(PullRequestListHeaders, Vec<PullRequest>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/pulls?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -5286,13 +5363,13 @@ impl crate::Forgejo { &self, owner: &str, repo: &str, - ) -> Result<Vec<PullRequest>, ForgejoError> { + ) -> Result<(PullRequestListHeaders, Vec<PullRequest>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/pulls/pinned")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -5515,7 +5592,7 @@ impl crate::Forgejo { repo: &str, index: u64, body: PullReviewRequestOptions, - ) -> Result<Vec<PullReview>, ForgejoError> { + ) -> Result<(PullReviewListHeaders, Vec<PullReview>), ForgejoError> { let request = self .post(&format!( "repos/{owner}/{repo}/pulls/{index}/requested_reviewers" @@ -5524,7 +5601,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 201 => Ok(response.json().await?), + 201 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -5566,7 +5643,7 @@ impl crate::Forgejo { repo: &str, index: u64, query: RepoListPullReviewsQuery, - ) -> Result<Vec<PullReview>, ForgejoError> { + ) -> Result<(PullReviewListHeaders, Vec<PullReview>), ForgejoError> { let request = self .get(&format!( "repos/{owner}/{repo}/pulls/{index}/reviews?{query}" @@ -5574,7 +5651,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -5687,7 +5764,7 @@ impl crate::Forgejo { repo: &str, index: u64, id: u64, - ) -> Result<Vec<PullReviewComment>, ForgejoError> { + ) -> Result<(PullReviewCommentListHeaders, Vec<PullReviewComment>), ForgejoError> { let request = self .get(&format!( "repos/{owner}/{repo}/pulls/{index}/reviews/{id}/comments" @@ -5695,7 +5772,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -5868,13 +5945,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoListPushMirrorsQuery, - ) -> Result<Vec<PushMirror>, ForgejoError> { + ) -> Result<(PushMirrorListHeaders, Vec<PushMirror>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/push_mirrors?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -5989,13 +6066,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoListReleasesQuery, - ) -> Result<Vec<Release>, ForgejoError> { + ) -> Result<(ReleaseListHeaders, Vec<Release>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/releases?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -6159,13 +6236,13 @@ impl crate::Forgejo { owner: &str, repo: &str, id: u64, - ) -> Result<Vec<Attachment>, ForgejoError> { + ) -> Result<(AttachmentListHeaders, Vec<Attachment>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/releases/{id}/assets")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -6307,13 +6384,13 @@ impl crate::Forgejo { &self, owner: &str, repo: &str, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/reviewers")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -6342,13 +6419,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoListStargazersQuery, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/stargazers?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -6364,13 +6441,13 @@ impl crate::Forgejo { repo: &str, sha: &str, query: RepoListStatusesQuery, - ) -> Result<Vec<CommitStatus>, ForgejoError> { + ) -> Result<(CommitStatusListHeaders, Vec<CommitStatus>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/statuses/{sha}?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -6408,13 +6485,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoListSubscribersQuery, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/subscribers?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -6484,13 +6561,13 @@ impl crate::Forgejo { &self, owner: &str, repo: &str, - ) -> Result<Vec<TagProtection>, ForgejoError> { + ) -> Result<(TagProtectionListHeaders, Vec<TagProtection>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/tag_protections")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -6592,13 +6669,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoListTagsQuery, - ) -> Result<Vec<Tag>, ForgejoError> { + ) -> Result<(TagListHeaders, Vec<Tag>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/tags?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -6675,11 +6752,11 @@ impl crate::Forgejo { &self, owner: &str, repo: &str, - ) -> Result<Vec<Team>, ForgejoError> { + ) -> Result<(TeamListHeaders, Vec<Team>), ForgejoError> { let request = self.get(&format!("repos/{owner}/{repo}/teams")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -6756,13 +6833,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoTrackedTimesQuery, - ) -> Result<Vec<TrackedTime>, ForgejoError> { + ) -> Result<(TrackedTimeListHeaders, Vec<TrackedTime>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/times?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -6777,13 +6854,13 @@ impl crate::Forgejo { owner: &str, repo: &str, user: &str, - ) -> Result<Vec<TrackedTime>, ForgejoError> { + ) -> Result<(TrackedTimeListHeaders, Vec<TrackedTime>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/times/{user}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7031,13 +7108,13 @@ impl crate::Forgejo { owner: &str, repo: &str, query: RepoGetWikiPagesQuery, - ) -> Result<Vec<WikiPageMetaData>, ForgejoError> { + ) -> Result<(WikiPageListHeaders, Vec<WikiPageMetaData>), ForgejoError> { let request = self .get(&format!("repos/{owner}/{repo}/wiki/pages?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7053,7 +7130,7 @@ impl crate::Forgejo { repo: &str, page_name: &str, query: RepoGetWikiPageRevisionsQuery, - ) -> Result<WikiCommitList, ForgejoError> { + ) -> Result<(WikiCommitListHeaders, WikiCommitList), ForgejoError> { let request = self .get(&format!( "repos/{owner}/{repo}/wiki/revisions/{page_name}?{query}" @@ -7061,7 +7138,7 @@ impl crate::Forgejo { .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7198,13 +7275,13 @@ impl crate::Forgejo { &self, id: u64, query: OrgListTeamActivityFeedsQuery, - ) -> Result<Vec<Activity>, ForgejoError> { + ) -> Result<(ActivityFeedsListHeaders, Vec<Activity>), ForgejoError> { let request = self .get(&format!("teams/{id}/activities/feeds?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7216,11 +7293,11 @@ impl crate::Forgejo { &self, id: u64, query: OrgListTeamMembersQuery, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self.get(&format!("teams/{id}/members?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7285,11 +7362,11 @@ impl crate::Forgejo { &self, id: u64, query: OrgListTeamReposQuery, - ) -> Result<Vec<Repository>, ForgejoError> { + ) -> Result<(RepositoryListHeaders, Vec<Repository>), ForgejoError> { let request = self.get(&format!("teams/{id}/repos?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7435,13 +7512,13 @@ impl crate::Forgejo { pub async fn get_user_variables_list( &self, query: GetUserVariablesListQuery, - ) -> Result<Vec<ActionVariable>, ForgejoError> { + ) -> Result<(VariableListHeaders, Vec<ActionVariable>), ForgejoError> { let request = self .get(&format!("user/actions/variables?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7525,13 +7602,13 @@ impl crate::Forgejo { pub async fn user_get_oauth2_applications( &self, query: UserGetOAuth2ApplicationsQuery, - ) -> Result<Vec<OAuth2Application>, ForgejoError> { + ) -> Result<(OAuth2ApplicationListHeaders, Vec<OAuth2Application>), ForgejoError> { let request = self .get(&format!("user/applications/oauth2?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7640,11 +7717,11 @@ impl crate::Forgejo { } /// List the authenticated user's email addresses - pub async fn user_list_emails(&self) -> Result<Vec<Email>, ForgejoError> { + pub async fn user_list_emails(&self) -> Result<(EmailListHeaders, Vec<Email>), ForgejoError> { let request = self.get("user/emails").build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7655,11 +7732,11 @@ impl crate::Forgejo { pub async fn user_add_email( &self, body: CreateEmailOption, - ) -> Result<Vec<Email>, ForgejoError> { + ) -> Result<(EmailListHeaders, Vec<Email>), ForgejoError> { let request = self.post("user/emails").json(&body).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 201 => Ok(response.json().await?), + 201 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7681,11 +7758,11 @@ impl crate::Forgejo { pub async fn user_current_list_followers( &self, query: UserCurrentListFollowersQuery, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self.get(&format!("user/followers?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7695,11 +7772,11 @@ impl crate::Forgejo { pub async fn user_current_list_following( &self, query: UserCurrentListFollowingQuery, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self.get(&format!("user/following?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7765,11 +7842,11 @@ impl crate::Forgejo { pub async fn user_current_list_gpg_keys( &self, query: UserCurrentListGpgKeysQuery, - ) -> Result<Vec<GPGKey>, ForgejoError> { + ) -> Result<(GpgKeyListHeaders, Vec<GPGKey>), ForgejoError> { let request = self.get(&format!("user/gpg_keys?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7818,11 +7895,11 @@ impl crate::Forgejo { pub async fn user_list_hooks( &self, query: UserListHooksQuery, - ) -> Result<Vec<Hook>, ForgejoError> { + ) -> Result<(HookListHeaders, Vec<Hook>), ForgejoError> { let request = self.get(&format!("user/hooks?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7888,11 +7965,11 @@ impl crate::Forgejo { pub async fn user_current_list_keys( &self, query: UserCurrentListKeysQuery, - ) -> Result<Vec<PublicKey>, ForgejoError> { + ) -> Result<(PublicKeyListHeaders, Vec<PublicKey>), ForgejoError> { let request = self.get(&format!("user/keys?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7941,11 +8018,11 @@ impl crate::Forgejo { pub async fn user_list_blocked_users( &self, query: UserListBlockedUsersQuery, - ) -> Result<Vec<BlockedUser>, ForgejoError> { + ) -> Result<(BlockedUserListHeaders, Vec<BlockedUser>), ForgejoError> { let request = self.get(&format!("user/list_blocked?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7955,11 +8032,11 @@ impl crate::Forgejo { pub async fn org_list_current_user_orgs( &self, query: OrgListCurrentUserOrgsQuery, - ) -> Result<Vec<Organization>, ForgejoError> { + ) -> Result<(OrganizationListHeaders, Vec<Organization>), ForgejoError> { let request = self.get(&format!("user/orgs?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7979,11 +8056,11 @@ impl crate::Forgejo { pub async fn user_list_quota_artifacts( &self, query: UserListQuotaArtifactsQuery, - ) -> Result<Vec<QuotaUsedArtifact>, ForgejoError> { + ) -> Result<(QuotaUsedArtifactListHeaders, Vec<QuotaUsedArtifact>), ForgejoError> { let request = self.get(&format!("user/quota/artifacts?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -7993,13 +8070,13 @@ impl crate::Forgejo { pub async fn user_list_quota_attachments( &self, query: UserListQuotaAttachmentsQuery, - ) -> Result<Vec<QuotaUsedAttachment>, ForgejoError> { + ) -> Result<(QuotaUsedAttachmentListHeaders, Vec<QuotaUsedAttachment>), ForgejoError> { let request = self .get(&format!("user/quota/attachments?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8019,11 +8096,11 @@ impl crate::Forgejo { pub async fn user_list_quota_packages( &self, query: UserListQuotaPackagesQuery, - ) -> Result<Vec<QuotaUsedPackage>, ForgejoError> { + ) -> Result<(QuotaUsedPackageListHeaders, Vec<QuotaUsedPackage>), ForgejoError> { let request = self.get(&format!("user/quota/packages?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8033,11 +8110,11 @@ impl crate::Forgejo { pub async fn user_current_list_repos( &self, query: UserCurrentListReposQuery, - ) -> Result<Vec<Repository>, ForgejoError> { + ) -> Result<(RepositoryListHeaders, Vec<Repository>), ForgejoError> { let request = self.get(&format!("user/repos?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8087,11 +8164,11 @@ impl crate::Forgejo { pub async fn user_current_list_starred( &self, query: UserCurrentListStarredQuery, - ) -> Result<Vec<Repository>, ForgejoError> { + ) -> Result<(RepositoryListHeaders, Vec<Repository>), ForgejoError> { let request = self.get(&format!("user/starred?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8150,11 +8227,11 @@ impl crate::Forgejo { pub async fn user_get_stop_watches( &self, query: UserGetStopWatchesQuery, - ) -> Result<Vec<StopWatch>, ForgejoError> { + ) -> Result<(StopWatchListHeaders, Vec<StopWatch>), ForgejoError> { let request = self.get(&format!("user/stopwatches?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8164,11 +8241,11 @@ impl crate::Forgejo { pub async fn user_current_list_subscriptions( &self, query: UserCurrentListSubscriptionsQuery, - ) -> Result<Vec<Repository>, ForgejoError> { + ) -> Result<(RepositoryListHeaders, Vec<Repository>), ForgejoError> { let request = self.get(&format!("user/subscriptions?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8178,11 +8255,11 @@ impl crate::Forgejo { pub async fn user_list_teams( &self, query: UserListTeamsQuery, - ) -> Result<Vec<Team>, ForgejoError> { + ) -> Result<(TeamListHeaders, Vec<Team>), ForgejoError> { let request = self.get(&format!("user/teams?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8192,11 +8269,11 @@ impl crate::Forgejo { pub async fn user_current_tracked_times( &self, query: UserCurrentTrackedTimesQuery, - ) -> Result<Vec<TrackedTime>, ForgejoError> { + ) -> Result<(TrackedTimeListHeaders, Vec<TrackedTime>), ForgejoError> { let request = self.get(&format!("user/times?{query}")).build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8246,13 +8323,13 @@ impl crate::Forgejo { &self, username: &str, query: UserListActivityFeedsQuery, - ) -> Result<Vec<Activity>, ForgejoError> { + ) -> Result<(ActivityFeedsListHeaders, Vec<Activity>), ForgejoError> { let request = self .get(&format!("users/{username}/activities/feeds?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8264,13 +8341,13 @@ impl crate::Forgejo { &self, username: &str, query: UserListFollowersQuery, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self .get(&format!("users/{username}/followers?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8282,13 +8359,13 @@ impl crate::Forgejo { &self, username: &str, query: UserListFollowingQuery, - ) -> Result<Vec<User>, ForgejoError> { + ) -> Result<(UserListHeaders, Vec<User>), ForgejoError> { let request = self .get(&format!("users/{username}/following?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8319,13 +8396,13 @@ impl crate::Forgejo { &self, username: &str, query: UserListGpgKeysQuery, - ) -> Result<Vec<GPGKey>, ForgejoError> { + ) -> Result<(GpgKeyListHeaders, Vec<GPGKey>), ForgejoError> { let request = self .get(&format!("users/{username}/gpg_keys?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8352,13 +8429,13 @@ impl crate::Forgejo { &self, username: &str, query: UserListKeysQuery, - ) -> Result<Vec<PublicKey>, ForgejoError> { + ) -> Result<(PublicKeyListHeaders, Vec<PublicKey>), ForgejoError> { let request = self .get(&format!("users/{username}/keys?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8370,13 +8447,13 @@ impl crate::Forgejo { &self, username: &str, query: OrgListUserOrgsQuery, - ) -> Result<Vec<Organization>, ForgejoError> { + ) -> Result<(OrganizationListHeaders, Vec<Organization>), ForgejoError> { let request = self .get(&format!("users/{username}/orgs?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8407,13 +8484,13 @@ impl crate::Forgejo { &self, username: &str, query: UserListReposQuery, - ) -> Result<Vec<Repository>, ForgejoError> { + ) -> Result<(RepositoryListHeaders, Vec<Repository>), ForgejoError> { let request = self .get(&format!("users/{username}/repos?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8425,13 +8502,13 @@ impl crate::Forgejo { &self, username: &str, query: UserListStarredQuery, - ) -> Result<Vec<Repository>, ForgejoError> { + ) -> Result<(RepositoryListHeaders, Vec<Repository>), ForgejoError> { let request = self .get(&format!("users/{username}/starred?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8443,13 +8520,13 @@ impl crate::Forgejo { &self, username: &str, query: UserListSubscriptionsQuery, - ) -> Result<Vec<Repository>, ForgejoError> { + ) -> Result<(RepositoryListHeaders, Vec<Repository>), ForgejoError> { let request = self .get(&format!("users/{username}/subscriptions?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } @@ -8461,13 +8538,13 @@ impl crate::Forgejo { &self, username: &str, query: UserGetTokensQuery, - ) -> Result<Vec<AccessToken>, ForgejoError> { + ) -> Result<(AccessTokenListHeaders, Vec<AccessToken>), ForgejoError> { let request = self .get(&format!("users/{username}/tokens?{query}")) .build()?; let response = self.execute(request).await?; match response.status().as_u16() { - 200 => Ok(response.json().await?), + 200 => Ok((response.headers().try_into()?, response.json().await?)), _ => Err(ForgejoError::UnexpectedStatusCode(response.status())), } } diff --git a/src/generated/structs.rs b/src/generated/structs.rs index a65f45d..c51164f 100644 --- a/src/generated/structs.rs +++ b/src/generated/structs.rs @@ -8,6 +8,44 @@ pub struct APIError { pub url: Option<url::Url>, } +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct APIForbiddenError { + pub message: Option<String>, + pub url: Option<String>, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct APIInvalidTopicsError { + #[serde(rename = "invalidTopics")] + pub invalid_topics: Option<Vec<String>>, + pub message: Option<String>, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct APINotFound { + pub errors: Option<Vec<String>>, + pub message: Option<String>, + pub url: Option<String>, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct APIRepoArchivedError { + pub message: Option<String>, + pub url: Option<String>, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct APIUnauthorizedError { + pub message: Option<String>, + pub url: Option<String>, +} + +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct APIValidationError { + pub message: Option<String>, + pub url: Option<String>, +} + #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub struct AccessToken { pub id: Option<i64>, @@ -1276,6 +1314,8 @@ pub struct EditRepoOption { /// set to `true` to delete pr branch after merge by default pub default_delete_branch_after_merge: Option<bool>, pub default_merge_style: Option<DefaultMergeStyle>, + /// set to a update style to be used by this repository: "rebase" or "merge" + pub default_update_style: Option<String>, /// a short description of the repository. pub description: Option<String>, /// enable prune - remove obsolete remote-tracking references when mirroring @@ -1844,6 +1884,13 @@ pub struct MarkdownOption { /// MarkupOption markup options #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub struct MarkupOption { + /// The current branch path where the form gets posted + /// + /// + /// + /// in: body + #[serde(rename = "BranchPath")] + pub branch_path: Option<String>, /// Context to render /// /// @@ -2043,6 +2090,11 @@ pub struct Note { pub message: Option<String>, } +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct NoteOptions { + pub message: Option<String>, +} + /// NotificationCount number of unread notifications #[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub struct NotificationCount { @@ -2623,6 +2675,7 @@ pub struct Repository { pub default_branch: Option<String>, pub default_delete_branch_after_merge: Option<bool>, pub default_merge_style: Option<DefaultMergeStyle>, + pub default_update_style: Option<String>, pub description: Option<String>, pub empty: Option<bool>, pub external_tracker: Option<ExternalTracker>, @@ -2899,6 +2952,13 @@ pub struct TransferRepoOption { pub team_ids: Option<Vec<i64>>, } +/// UpdateBranchRepoOption options when updating a branch in a repository +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] +pub struct UpdateBranchRepoOption { + /// New branch name + pub name: String, +} + /// UpdateFileOptions options for updating 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) @@ -3092,6 +3152,378 @@ pub struct WikiPageMetaData { pub title: Option<String>, } +pub struct AccessTokenListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for AccessTokenListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct ActivityFeedsListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for ActivityFeedsListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct AttachmentListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for AttachmentListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct BlockedUserListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for BlockedUserListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct BranchListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for BranchListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct BranchProtectionListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for BranchProtectionListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + pub struct ChangedFileListHeaders { pub x_has_more: Option<bool>, pub x_page: Option<i64>, @@ -3154,6 +3586,68 @@ impl TryFrom<&reqwest::header::HeaderMap> for ChangedFileListHeaders { } } +pub struct CommentListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for CommentListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + pub struct CommitListHeaders { pub x_has_more: Option<bool>, pub x_page: Option<i64>, @@ -3216,6 +3710,1866 @@ impl TryFrom<&reqwest::header::HeaderMap> for CommitListHeaders { } } +pub struct CommitStatusListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for CommitStatusListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct CronListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for CronListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct DeployKeyListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for DeployKeyListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct EmailListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for EmailListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct GpgKeyListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for GpgKeyListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct GitHookListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for GitHookListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct GitignoreTemplateListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for GitignoreTemplateListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct HookListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for HookListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct IssueListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for IssueListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct LabelListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for LabelListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct LabelTemplateListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for LabelTemplateListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct LicenseTemplateListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for LicenseTemplateListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct MilestoneListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for MilestoneListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct NotificationThreadListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for NotificationThreadListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct OAuth2ApplicationListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for OAuth2ApplicationListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct OrganizationListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for OrganizationListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct PackageFileListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for PackageFileListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct PackageListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for PackageListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct PublicKeyListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for PublicKeyListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct PullRequestListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for PullRequestListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct PullReviewCommentListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for PullReviewCommentListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct PullReviewListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for PullReviewListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct PushMirrorListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for PushMirrorListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct QuotaGroupListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for QuotaGroupListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct QuotaRuleInfoListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for QuotaRuleInfoListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct QuotaUsedArtifactListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for QuotaUsedArtifactListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct QuotaUsedAttachmentListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for QuotaUsedAttachmentListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct QuotaUsedPackageListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for QuotaUsedPackageListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct ReactionListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for ReactionListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct ReferenceListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for ReferenceListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + pub struct RegistrationTokenHeaders { pub token: Option<String>, } @@ -3235,88 +5589,870 @@ impl TryFrom<&reqwest::header::HeaderMap> for RegistrationTokenHeaders { } } -pub struct ErrorHeaders { - pub message: Option<String>, - pub url: Option<url::Url>, +pub struct ReleaseListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, } -impl TryFrom<&reqwest::header::HeaderMap> for ErrorHeaders { +impl TryFrom<&reqwest::header::HeaderMap> for ReleaseListHeaders { type Error = StructureError; fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { - let message = map - .get("message") + let x_has_more = map + .get("X-HasMore") .map(|s| -> Result<_, _> { let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; - Ok(s.to_string()) - }) - .transpose()?; - let url = map - .get("url") - .map(|s| -> Result<_, _> { - let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; - s.parse::<url::Url>() + s.parse::<bool>() .map_err(|_| StructureError::HeaderParseFailed) }) .transpose()?; - Ok(Self { message, url }) - } -} - -pub struct ForbiddenHeaders { - pub message: Option<String>, - pub url: Option<url::Url>, -} - -impl TryFrom<&reqwest::header::HeaderMap> for ForbiddenHeaders { - type Error = StructureError; - - fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { - let message = map - .get("message") + let x_page = map + .get("X-Page") .map(|s| -> Result<_, _> { let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; - Ok(s.to_string()) - }) - .transpose()?; - let url = map - .get("url") - .map(|s| -> Result<_, _> { - let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; - s.parse::<url::Url>() + s.parse::<i64>() .map_err(|_| StructureError::HeaderParseFailed) }) .transpose()?; - Ok(Self { message, url }) - } -} - -pub struct InvalidTopicsErrorHeaders { - pub invalid_topics: Option<Vec<String>>, - pub message: Option<String>, -} - -impl TryFrom<&reqwest::header::HeaderMap> for InvalidTopicsErrorHeaders { - type Error = StructureError; - - fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { - let invalid_topics = map - .get("invalidTopics") + let x_page_count = map + .get("X-PageCount") .map(|s| -> Result<_, _> { let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; - Ok(s.split(",").map(|s| s.to_string()).collect::<Vec<_>>()) + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) }) .transpose()?; - let message = map - .get("message") + let x_per_page = map + .get("X-PerPage") .map(|s| -> Result<_, _> { let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; - Ok(s.to_string()) + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) }) .transpose()?; Ok(Self { - invalid_topics, - message, + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct RepositoryListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for RepositoryListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct SecretListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for SecretListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct StopWatchListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for StopWatchListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct TagListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for TagListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct TagProtectionListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for TagProtectionListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct TasksListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for TasksListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct TeamListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for TeamListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct TimelineListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for TimelineListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct TrackedTimeListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for TrackedTimeListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct UserListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for UserListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct VariableListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for VariableListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct WikiCommitListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for WikiCommitListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, + }) + } +} + +pub struct WikiPageListHeaders { + pub x_has_more: Option<bool>, + pub x_page: Option<i64>, + pub x_page_count: Option<i64>, + pub x_per_page: Option<i64>, + pub x_total: Option<i64>, +} + +impl TryFrom<&reqwest::header::HeaderMap> for WikiPageListHeaders { + type Error = StructureError; + + fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { + let x_has_more = map + .get("X-HasMore") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<bool>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page = map + .get("X-Page") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_page_count = map + .get("X-PageCount") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_per_page = map + .get("X-PerPage") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + let x_total = map + .get("X-Total") + .map(|s| -> Result<_, _> { + let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; + s.parse::<i64>() + .map_err(|_| StructureError::HeaderParseFailed) + }) + .transpose()?; + Ok(Self { + x_has_more, + x_page, + x_page_count, + x_per_page, + x_total, }) } } @@ -3361,62 +6497,6 @@ impl TryFrom<&reqwest::header::HeaderMap> for QuotaExceededHeaders { } } -pub struct RepoArchivedErrorHeaders { - pub message: Option<String>, - pub url: Option<url::Url>, -} - -impl TryFrom<&reqwest::header::HeaderMap> for RepoArchivedErrorHeaders { - type Error = StructureError; - - fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { - let message = map - .get("message") - .map(|s| -> Result<_, _> { - let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; - Ok(s.to_string()) - }) - .transpose()?; - let url = map - .get("url") - .map(|s| -> Result<_, _> { - let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; - s.parse::<url::Url>() - .map_err(|_| StructureError::HeaderParseFailed) - }) - .transpose()?; - Ok(Self { message, url }) - } -} - -pub struct ValidationErrorHeaders { - pub message: Option<String>, - pub url: Option<url::Url>, -} - -impl TryFrom<&reqwest::header::HeaderMap> for ValidationErrorHeaders { - type Error = StructureError; - - fn try_from(map: &reqwest::header::HeaderMap) -> Result<Self, Self::Error> { - let message = map - .get("message") - .map(|s| -> Result<_, _> { - let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; - Ok(s.to_string()) - }) - .transpose()?; - let url = map - .get("url") - .map(|s| -> Result<_, _> { - let s = s.to_str().map_err(|_| StructureError::HeaderNotAscii)?; - s.parse::<url::Url>() - .map_err(|_| StructureError::HeaderParseFailed) - }) - .transpose()?; - Ok(Self { message, url }) - } -} - #[derive(Debug, Clone, PartialEq, Default)] pub struct AdminCronListQuery { /// page number of results to return (1-based) @@ -3559,6 +6639,8 @@ pub struct AdminSearchUsersQuery { pub source_id: Option<u64>, /// user's login name to search for pub login_name: Option<String>, + /// sort order of results + pub sort: Option<AdminSearchUsersQuerySort>, /// page number of results to return (1-based) pub page: Option<u32>, /// page size of results @@ -3573,6 +6655,9 @@ impl std::fmt::Display for AdminSearchUsersQuery { if let Some(login_name) = &self.login_name { write!(f, "login_name={login_name}&")?; } + if let Some(sort) = &self.sort { + write!(f, "sort={}&", sort.as_str())?; + } if let Some(page) = &self.page { write!(f, "page={page}&")?; } @@ -3584,6 +6669,34 @@ impl std::fmt::Display for AdminSearchUsersQuery { } } +#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum AdminSearchUsersQuerySort { + #[serde(rename = "oldest")] + Oldest, + #[serde(rename = "newest")] + Newest, + #[serde(rename = "alphabetically")] + Alphabetically, + #[serde(rename = "reversealphabetically")] + Reversealphabetically, + #[serde(rename = "recentupdate")] + Recentupdate, + #[serde(rename = "leastupdate")] + Leastupdate, +} + +impl AdminSearchUsersQuerySort { + fn as_str(&self) -> &'static str { + match self { + AdminSearchUsersQuerySort::Oldest => "oldest", + AdminSearchUsersQuerySort::Newest => "newest", + AdminSearchUsersQuerySort::Alphabetically => "alphabetically", + AdminSearchUsersQuerySort::Reversealphabetically => "reversealphabetically", + AdminSearchUsersQuerySort::Recentupdate => "recentupdate", + AdminSearchUsersQuerySort::Leastupdate => "leastupdate", + } + } +} #[derive(Debug, Clone, PartialEq, Default)] pub struct AdminDeleteUserQuery { /// purge the user from the system completely @@ -4198,46 +7311,46 @@ impl ListPackagesQueryType { } #[derive(Debug, Clone, PartialEq, Default)] pub struct IssueSearchIssuesQuery { - /// whether issue is open or closed - pub state: Option<String>, - /// comma separated list of labels. Fetch only issues that have any of this labels. Non existent labels are discarded + /// State of the issue + pub state: Option<IssueSearchIssuesQueryState>, + /// Comma-separated list of label names. Fetch only issues that have any of these labels. Non existent labels are discarded. pub labels: Option<String>, - /// comma separated list of milestone names. Fetch only issues that have any of this milestones. Non existent are discarded + /// Comma-separated list of milestone names. Fetch only issues that have any of these milestones. Non existent milestones are discarded. pub milestones: Option<String>, - /// search string + /// Search string pub q: Option<String>, - /// repository to prioritize in the results + /// Repository ID to prioritize in the results pub priority_repo_id: Option<u64>, - /// filter by type (issues / pulls) if set - pub r#type: Option<String>, - /// Only show notifications updated after the given time. This is a timestamp in RFC 3339 format + /// Filter by issue type + pub r#type: Option<IssueSearchIssuesQueryType>, + /// Only show issues updated after the given time (RFC 3339 format) pub since: Option<time::OffsetDateTime>, - /// Only show notifications updated before the given time. This is a timestamp in RFC 3339 format + /// Only show issues updated before the given time (RFC 3339 format) pub before: Option<time::OffsetDateTime>, - /// filter (issues / pulls) assigned to you, default is false + /// Filter issues or pulls assigned to the authenticated user pub assigned: Option<bool>, - /// filter (issues / pulls) created by you, default is false + /// Filter issues or pulls created by the authenticated user pub created: Option<bool>, - /// filter (issues / pulls) mentioning you, default is false + /// Filter issues or pulls mentioning the authenticated user pub mentioned: Option<bool>, - /// filter pulls requesting your review, default is false + /// Filter pull requests where the authenticated user's review was requested pub review_requested: Option<bool>, - /// filter pulls reviewed by you, default is false + /// Filter pull requests reviewed by the authenticated user pub reviewed: Option<bool>, - /// filter by owner + /// Filter by repository owner pub owner: Option<String>, - /// filter by team (requires organization owner parameter to be provided) + /// Filter by team (requires organization owner parameter) pub team: Option<String>, - /// page number of results to return (1-based) + /// Page number of results to return (1-based) pub page: Option<u32>, - /// page size of results + /// Number of items per page pub limit: Option<u32>, } impl std::fmt::Display for IssueSearchIssuesQuery { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { if let Some(state) = &self.state { - write!(f, "state={state}&")?; + write!(f, "state={}&", state.as_str())?; } if let Some(labels) = &self.labels { write!(f, "labels={labels}&")?; @@ -4252,7 +7365,7 @@ impl std::fmt::Display for IssueSearchIssuesQuery { write!(f, "priority_repo_id={priority_repo_id}&")?; } if let Some(r#type) = &self.r#type { - write!(f, "type={type}&")?; + write!(f, "type={}&", r#type.as_str())?; } if let Some(since) = &self.since { write!( @@ -4304,6 +7417,42 @@ impl std::fmt::Display for IssueSearchIssuesQuery { } } +#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum IssueSearchIssuesQueryState { + #[serde(rename = "open")] + Open, + #[serde(rename = "closed")] + Closed, + #[serde(rename = "all")] + All, +} + +impl IssueSearchIssuesQueryState { + fn as_str(&self) -> &'static str { + match self { + IssueSearchIssuesQueryState::Open => "open", + IssueSearchIssuesQueryState::Closed => "closed", + IssueSearchIssuesQueryState::All => "all", + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)] +pub enum IssueSearchIssuesQueryType { + #[serde(rename = "issues")] + Issues, + #[serde(rename = "pulls")] + Pulls, +} + +impl IssueSearchIssuesQueryType { + fn as_str(&self) -> &'static str { + match self { + IssueSearchIssuesQueryType::Issues => "issues", + IssueSearchIssuesQueryType::Pulls => "pulls", + } + } +} #[derive(Debug, Clone, PartialEq, Default)] pub struct RepoSearchQuery { /// keyword @@ -5530,7 +8679,7 @@ impl std::fmt::Display for NotifyReadRepoListQuery { #[derive(Debug, Clone, PartialEq, Default)] pub struct RepoListPullRequestsQuery { - /// State of pull request: open or closed (optional) + /// State of pull request pub state: Option<RepoListPullRequestsQueryState>, /// Type of sort pub sort: Option<RepoListPullRequestsQuerySort>, @@ -5538,9 +8687,11 @@ pub struct RepoListPullRequestsQuery { pub milestone: Option<u64>, /// Label IDs pub labels: Option<Vec<u64>>, - /// page number of results to return (1-based) + /// Filter by pull request author + pub poster: Option<String>, + /// Page number of results to return (1-based) pub page: Option<u32>, - /// page size of results + /// Page size of results pub limit: Option<u32>, } @@ -5564,6 +8715,9 @@ impl std::fmt::Display for RepoListPullRequestsQuery { } } } + if let Some(poster) = &self.poster { + write!(f, "poster={poster}&")?; + } if let Some(page) = &self.page { write!(f, "page={page}&")?; } @@ -5577,10 +8731,10 @@ impl std::fmt::Display for RepoListPullRequestsQuery { #[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)] pub enum RepoListPullRequestsQueryState { - #[serde(rename = "closed")] - Closed, #[serde(rename = "open")] Open, + #[serde(rename = "closed")] + Closed, #[serde(rename = "all")] All, } @@ -5588,8 +8742,8 @@ pub enum RepoListPullRequestsQueryState { impl RepoListPullRequestsQueryState { fn as_str(&self) -> &'static str { match self { - RepoListPullRequestsQueryState::Closed => "closed", RepoListPullRequestsQueryState::Open => "open", + RepoListPullRequestsQueryState::Closed => "closed", RepoListPullRequestsQueryState::All => "all", } } @@ -5819,6 +8973,8 @@ pub struct RepoListReleasesQuery { pub draft: Option<bool>, /// filter (exclude / include) pre-releases pub pre_release: Option<bool>, + /// Search string + pub q: Option<String>, /// page number of results to return (1-based) pub page: Option<u32>, /// page size of results @@ -5833,6 +8989,9 @@ impl std::fmt::Display for RepoListReleasesQuery { if let Some(pre_release) = &self.pre_release { write!(f, "pre-release={pre_release}&")?; } + if let Some(q) = &self.q { + write!(f, "q={q}&")?; + } if let Some(page) = &self.page { write!(f, "page={page}&")?; } diff --git a/swagger.v1.json b/swagger.v1.json index 13b13ad..98cbfe1 100644 --- a/swagger.v1.json +++ b/swagger.v1.json @@ -10,7 +10,7 @@ "name": "This file is distributed under the MIT license for the purpose of interoperability", "url": "http://opensource.org/licenses/MIT" }, - "version": "9.0.0-dev-1111-0496e72d15+gitea-1.22.0" + "version": "10.0.0-58-7e1df53+gitea-1.22.0" }, "basePath": "/api/v1", "paths": { @@ -1005,6 +1005,20 @@ "name": "login_name", "in": "query" }, + { + "enum": [ + "oldest", + "newest", + "alphabetically", + "reversealphabetically", + "recentupdate", + "leastupdate" + ], + "type": "string", + "description": "sort order of results", + "name": "sort", + "in": "query" + }, { "type": "integer", "format": "uint32", @@ -1971,6 +1985,9 @@ }, "404": { "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/error" } } } @@ -3734,109 +3751,120 @@ "operationId": "issueSearchIssues", "parameters": [ { + "enum": ["open", "closed", "all"], "type": "string", - "description": "whether issue is open or closed", + "default": "open", + "description": "State of the issue", "name": "state", "in": "query" }, { "type": "string", - "description": "comma separated list of labels. Fetch only issues that have any of this labels. Non existent labels are discarded", + "description": "Comma-separated list of label names. Fetch only issues that have any of these labels. Non existent labels are discarded.", "name": "labels", "in": "query" }, { "type": "string", - "description": "comma separated list of milestone names. Fetch only issues that have any of this milestones. Non existent are discarded", + "description": "Comma-separated list of milestone names. Fetch only issues that have any of these milestones. Non existent milestones are discarded.", "name": "milestones", "in": "query" }, { "type": "string", - "description": "search string", + "description": "Search string", "name": "q", "in": "query" }, { "type": "integer", "format": "uint64", - "description": "repository to prioritize in the results", + "description": "Repository ID to prioritize in the results", "name": "priority_repo_id", "in": "query" }, { + "enum": ["issues", "pulls"], "type": "string", - "description": "filter by type (issues / pulls) if set", + "description": "Filter by issue type", "name": "type", "in": "query" }, { "type": "string", "format": "date-time", - "description": "Only show notifications updated after the given time. This is a timestamp in RFC 3339 format", + "description": "Only show issues updated after the given time (RFC 3339 format)", "name": "since", "in": "query" }, { "type": "string", "format": "date-time", - "description": "Only show notifications updated before the given time. This is a timestamp in RFC 3339 format", + "description": "Only show issues updated before the given time (RFC 3339 format)", "name": "before", "in": "query" }, { "type": "boolean", - "description": "filter (issues / pulls) assigned to you, default is false", + "default": false, + "description": "Filter issues or pulls assigned to the authenticated user", "name": "assigned", "in": "query" }, { "type": "boolean", - "description": "filter (issues / pulls) created by you, default is false", + "default": false, + "description": "Filter issues or pulls created by the authenticated user", "name": "created", "in": "query" }, { "type": "boolean", - "description": "filter (issues / pulls) mentioning you, default is false", + "default": false, + "description": "Filter issues or pulls mentioning the authenticated user", "name": "mentioned", "in": "query" }, { "type": "boolean", - "description": "filter pulls requesting your review, default is false", + "default": false, + "description": "Filter pull requests where the authenticated user's review was requested", "name": "review_requested", "in": "query" }, { "type": "boolean", - "description": "filter pulls reviewed by you, default is false", + "default": false, + "description": "Filter pull requests reviewed by the authenticated user", "name": "reviewed", "in": "query" }, { "type": "string", - "description": "filter by owner", + "description": "Filter by repository owner", "name": "owner", "in": "query" }, { "type": "string", - "description": "filter by team (requires organization owner parameter to be provided)", + "description": "Filter by team (requires organization owner parameter)", "name": "team", "in": "query" }, { + "minimum": 1, "type": "integer", "format": "uint32", - "description": "page number of results to return (1-based)", + "default": 1, + "description": "Page number of results to return (1-based)", "name": "page", "in": "query" }, { + "minimum": 0, "type": "integer", "format": "uint32", - "description": "page size of results", + "description": "Number of items per page", "name": "limit", "in": "query" } @@ -3844,6 +3872,12 @@ "responses": { "200": { "$ref": "#/responses/IssueList" + }, + "400": { + "$ref": "#/responses/error" + }, + "422": { + "$ref": "#/responses/validationError" } } } @@ -5201,6 +5235,57 @@ "$ref": "#/responses/repoArchivedError" } } + }, + "patch": { + "consumes": ["application/json"], + "produces": ["application/json"], + "tags": ["repository"], + "summary": "Update a branch", + "operationId": "repoUpdateBranch", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the branch", + "name": "branch", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/UpdateBranchRepoOption" + } + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "403": { + "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } } }, "/repos/{owner}/{repo}/collaborators": { @@ -6644,6 +6729,93 @@ "$ref": "#/responses/validationError" } } + }, + "post": { + "produces": ["application/json"], + "tags": ["repository"], + "summary": "Set a note corresponding to a single commit from a repository", + "operationId": "repoSetNote", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "a git ref or commit sha", + "name": "sha", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/NoteOptions" + } + } + ], + "responses": { + "200": { + "$ref": "#/responses/Note" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } + }, + "delete": { + "produces": ["application/json"], + "tags": ["repository"], + "summary": "Removes a note corresponding to a single commit from a repository", + "operationId": "repoRemoveNote", + "parameters": [ + { + "type": "string", + "description": "owner of the repo", + "name": "owner", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "repo", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "a git ref or commit sha", + "name": "sha", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "$ref": "#/responses/empty" + }, + "404": { + "$ref": "#/responses/notFound" + }, + "422": { + "$ref": "#/responses/validationError" + } + } } }, "/repos/{owner}/{repo}/git/refs": { @@ -11165,22 +11337,23 @@ "parameters": [ { "type": "string", - "description": "owner of the repo", + "description": "Owner of the repo", "name": "owner", "in": "path", "required": true }, { "type": "string", - "description": "name of the repo", + "description": "Name of the repo", "name": "repo", "in": "path", "required": true }, { - "enum": ["closed", "open", "all"], + "enum": ["open", "closed", "all"], "type": "string", - "description": "State of pull request: open or closed (optional)", + "default": "open", + "description": "State of pull request", "name": "state", "in": "query" }, @@ -11217,16 +11390,25 @@ "in": "query" }, { + "type": "string", + "description": "Filter by pull request author", + "name": "poster", + "in": "query" + }, + { + "minimum": 1, "type": "integer", "format": "uint32", - "description": "page number of results to return (1-based)", + "default": 1, + "description": "Page number of results to return (1-based)", "name": "page", "in": "query" }, { + "minimum": 0, "type": "integer", "format": "uint32", - "description": "page size of results", + "description": "Page size of results", "name": "limit", "in": "query" } @@ -11237,6 +11419,9 @@ }, "404": { "$ref": "#/responses/notFound" + }, + "500": { + "$ref": "#/responses/error" } } }, @@ -12854,6 +13039,12 @@ "name": "pre-release", "in": "query" }, + { + "type": "string", + "description": "Search string", + "name": "q", + "in": "query" + }, { "type": "integer", "format": "uint32", @@ -15641,6 +15832,12 @@ "responses": { "200": { "$ref": "#/responses/User" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -15654,6 +15851,12 @@ "responses": { "200": { "$ref": "#/responses/RegistrationToken" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -15691,6 +15894,12 @@ "400": { "$ref": "#/responses/error" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -15718,6 +15927,12 @@ "400": { "$ref": "#/responses/error" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -15753,6 +15968,12 @@ "400": { "$ref": "#/responses/error" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -15781,6 +16002,12 @@ "400": { "$ref": "#/responses/error" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -15818,6 +16045,12 @@ "400": { "$ref": "#/responses/error" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -15855,6 +16088,12 @@ "400": { "$ref": "#/responses/error" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -15884,6 +16123,12 @@ "400": { "$ref": "#/responses/error" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -15915,6 +16160,12 @@ "responses": { "200": { "$ref": "#/responses/OAuth2ApplicationList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } }, @@ -15939,6 +16190,12 @@ }, "400": { "$ref": "#/responses/error" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -15963,6 +16220,12 @@ "200": { "$ref": "#/responses/OAuth2Application" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -15987,6 +16250,12 @@ "204": { "$ref": "#/responses/empty" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -16019,6 +16288,12 @@ "200": { "$ref": "#/responses/OAuth2Application" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -16043,6 +16318,12 @@ "responses": { "204": { "$ref": "#/responses/empty" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } }, @@ -16054,6 +16335,12 @@ "responses": { "204": { "$ref": "#/responses/empty" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -16077,6 +16364,12 @@ "204": { "$ref": "#/responses/empty" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" }, @@ -16095,6 +16388,12 @@ "responses": { "200": { "$ref": "#/responses/EmailList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } }, @@ -16116,6 +16415,12 @@ "201": { "$ref": "#/responses/EmailList" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "422": { "$ref": "#/responses/validationError" } @@ -16139,6 +16444,12 @@ "204": { "$ref": "#/responses/empty" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -16170,6 +16481,12 @@ "responses": { "200": { "$ref": "#/responses/UserList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -16199,6 +16516,12 @@ "responses": { "200": { "$ref": "#/responses/UserList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -16221,6 +16544,12 @@ "204": { "$ref": "#/responses/empty" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -16243,6 +16572,9 @@ "204": { "$ref": "#/responses/empty" }, + "401": { + "$ref": "#/responses/unauthorized" + }, "403": { "$ref": "#/responses/forbidden" }, @@ -16268,6 +16600,12 @@ "204": { "$ref": "#/responses/empty" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -16284,6 +16622,12 @@ "200": { "$ref": "#/responses/string" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -16301,6 +16645,12 @@ "201": { "$ref": "#/responses/GPGKey" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" }, @@ -16335,6 +16685,12 @@ "responses": { "200": { "$ref": "#/responses/GPGKeyList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } }, @@ -16357,6 +16713,12 @@ "201": { "$ref": "#/responses/GPGKey" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" }, @@ -16386,6 +16748,12 @@ "200": { "$ref": "#/responses/GPGKey" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -16410,6 +16778,9 @@ "204": { "$ref": "#/responses/empty" }, + "401": { + "$ref": "#/responses/unauthorized" + }, "403": { "$ref": "#/responses/forbidden" }, @@ -16444,6 +16815,12 @@ "responses": { "200": { "$ref": "#/responses/HookList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } }, @@ -16466,6 +16843,12 @@ "responses": { "201": { "$ref": "#/responses/Hook" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -16489,6 +16872,12 @@ "responses": { "200": { "$ref": "#/responses/Hook" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } }, @@ -16510,6 +16899,12 @@ "responses": { "204": { "$ref": "#/responses/empty" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } }, @@ -16539,6 +16934,12 @@ "responses": { "200": { "$ref": "#/responses/Hook" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -16574,6 +16975,12 @@ "responses": { "200": { "$ref": "#/responses/PublicKeyList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } }, @@ -16596,6 +17003,12 @@ "201": { "$ref": "#/responses/PublicKey" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "422": { "$ref": "#/responses/validationError" } @@ -16622,6 +17035,12 @@ "200": { "$ref": "#/responses/PublicKey" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -16646,6 +17065,9 @@ "204": { "$ref": "#/responses/empty" }, + "401": { + "$ref": "#/responses/unauthorized" + }, "403": { "$ref": "#/responses/forbidden" }, @@ -16680,6 +17102,12 @@ "responses": { "200": { "$ref": "#/responses/BlockedUserList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -16710,6 +17138,12 @@ "200": { "$ref": "#/responses/OrganizationList" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -16726,6 +17160,9 @@ "200": { "$ref": "#/responses/QuotaInfo" }, + "401": { + "$ref": "#/responses/unauthorized" + }, "403": { "$ref": "#/responses/forbidden" } @@ -16758,6 +17195,9 @@ "200": { "$ref": "#/responses/QuotaUsedArtifactList" }, + "401": { + "$ref": "#/responses/unauthorized" + }, "403": { "$ref": "#/responses/forbidden" } @@ -16790,6 +17230,9 @@ "200": { "$ref": "#/responses/QuotaUsedAttachmentList" }, + "401": { + "$ref": "#/responses/unauthorized" + }, "403": { "$ref": "#/responses/forbidden" } @@ -16806,6 +17249,9 @@ "200": { "$ref": "#/responses/boolean" }, + "401": { + "$ref": "#/responses/unauthorized" + }, "403": { "$ref": "#/responses/forbidden" }, @@ -16841,6 +17287,9 @@ "200": { "$ref": "#/responses/QuotaUsedPackageList" }, + "401": { + "$ref": "#/responses/unauthorized" + }, "403": { "$ref": "#/responses/forbidden" } @@ -16879,6 +17328,12 @@ "200": { "$ref": "#/responses/RepositoryList" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "422": { "$ref": "#/responses/validationError" } @@ -16906,6 +17361,12 @@ "400": { "$ref": "#/responses/error" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "409": { "description": "The repository with the same name already exists." }, @@ -16927,6 +17388,12 @@ "responses": { "200": { "$ref": "#/responses/UserSettings" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } }, @@ -16947,6 +17414,12 @@ "responses": { "200": { "$ref": "#/responses/UserSettings" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -16976,6 +17449,12 @@ "responses": { "200": { "$ref": "#/responses/RepositoryList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -17005,6 +17484,12 @@ "204": { "$ref": "#/responses/empty" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -17034,6 +17519,12 @@ "204": { "$ref": "#/responses/empty" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -17063,6 +17554,12 @@ "204": { "$ref": "#/responses/empty" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" } @@ -17095,6 +17592,12 @@ "responses": { "200": { "$ref": "#/responses/StopWatchList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -17124,6 +17627,12 @@ "responses": { "200": { "$ref": "#/responses/RepositoryList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -17153,6 +17662,12 @@ "responses": { "200": { "$ref": "#/responses/TeamList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -17196,6 +17711,12 @@ "responses": { "200": { "$ref": "#/responses/TrackedTimeList" + }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" } } } @@ -17219,6 +17740,12 @@ "204": { "$ref": "#/responses/empty" }, + "401": { + "$ref": "#/responses/unauthorized" + }, + "403": { + "$ref": "#/responses/forbidden" + }, "404": { "$ref": "#/responses/notFound" }, @@ -17805,6 +18332,9 @@ }, "403": { "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" } } }, @@ -17839,6 +18369,9 @@ }, "403": { "$ref": "#/responses/forbidden" + }, + "404": { + "$ref": "#/responses/notFound" } } } @@ -17912,6 +18445,100 @@ }, "x-go-package": "code.gitea.io/gitea/modules/structs" }, + "APIForbiddenError": { + "type": "object", + "properties": { + "message": { + "type": "string", + "x-go-name": "Message" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/services/context" + }, + "APIInvalidTopicsError": { + "type": "object", + "properties": { + "invalidTopics": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "InvalidTopics" + }, + "message": { + "type": "string", + "x-go-name": "Message" + } + }, + "x-go-package": "code.gitea.io/gitea/services/context" + }, + "APINotFound": { + "type": "object", + "properties": { + "errors": { + "type": "array", + "items": { + "type": "string" + }, + "x-go-name": "Errors" + }, + "message": { + "type": "string", + "x-go-name": "Message" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/services/context" + }, + "APIRepoArchivedError": { + "type": "object", + "properties": { + "message": { + "type": "string", + "x-go-name": "Message" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/services/context" + }, + "APIUnauthorizedError": { + "type": "object", + "properties": { + "message": { + "type": "string", + "x-go-name": "Message" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/services/context" + }, + "APIValidationError": { + "type": "object", + "properties": { + "message": { + "type": "string", + "x-go-name": "Message" + }, + "url": { + "type": "string", + "x-go-name": "URL" + } + }, + "x-go-package": "code.gitea.io/gitea/services/context" + }, "AccessToken": { "type": "object", "title": "AccessToken represents an API access token.", @@ -20845,6 +21472,11 @@ "default_merge_style": { "$ref": "#/definitions/DefaultMergeStyle" }, + "default_update_style": { + "description": "set to a update style to be used by this repository: \"rebase\" or \"merge\"", + "type": "string", + "x-go-name": "DefaultUpdateStyle" + }, "description": { "description": "a short description of the repository.", "type": "string", @@ -22279,6 +22911,10 @@ "description": "MarkupOption markup options", "type": "object", "properties": { + "BranchPath": { + "description": "The current branch path where the form gets posted\n\nin: body", + "type": "string" + }, "Context": { "description": "Context to render\n\nin: body", "type": "string" @@ -22651,6 +23287,16 @@ }, "x-go-package": "code.gitea.io/gitea/modules/structs" }, + "NoteOptions": { + "type": "object", + "properties": { + "message": { + "type": "string", + "x-go-name": "Message" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, "NotificationCount": { "description": "NotificationCount number of unread notifications", "type": "object", @@ -24153,6 +24799,10 @@ "default_merge_style": { "$ref": "#/definitions/DefaultMergeStyle" }, + "default_update_style": { + "type": "string", + "x-go-name": "DefaultUpdateStyle" + }, "description": { "type": "string", "x-go-name": "Description" @@ -24905,6 +25555,20 @@ }, "x-go-package": "code.gitea.io/gitea/modules/structs" }, + "UpdateBranchRepoOption": { + "description": "UpdateBranchRepoOption options when updating a branch in a repository", + "type": "object", + "required": ["name"], + "properties": { + "name": { + "description": "New branch name", + "type": "string", + "uniqueItems": true, + "x-go-name": "Name" + } + }, + "x-go-package": "code.gitea.io/gitea/modules/structs" + }, "UpdateFileOptions": { "description": "UpdateFileOptions options for updating files\nNote: `author` and `committer` are optional (if only one is given, it will be used for the other, otherwise the authenticated user will be used)", "type": "object", @@ -25398,6 +26062,32 @@ "items": { "$ref": "#/definitions/AccessToken" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "ActionVariable": { @@ -25413,6 +26103,32 @@ "items": { "$ref": "#/definitions/Activity" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "ActivityPub": { @@ -25440,6 +26156,32 @@ "items": { "$ref": "#/definitions/Attachment" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "BlockedUserList": { @@ -25449,6 +26191,32 @@ "items": { "$ref": "#/definitions/BlockedUser" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "Branch": { @@ -25464,6 +26232,32 @@ "items": { "$ref": "#/definitions/Branch" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "BranchProtection": { @@ -25479,6 +26273,32 @@ "items": { "$ref": "#/definitions/BranchProtection" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "ChangedFileList": { @@ -25535,6 +26355,32 @@ "items": { "$ref": "#/definitions/Comment" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "Commit": { @@ -25591,6 +26437,32 @@ "items": { "$ref": "#/definitions/CommitStatus" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "Compare": { @@ -25621,6 +26493,32 @@ "items": { "$ref": "#/definitions/Cron" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "DeployKey": { @@ -25636,6 +26534,32 @@ "items": { "$ref": "#/definitions/DeployKey" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "EmailList": { @@ -25645,6 +26569,32 @@ "items": { "$ref": "#/definitions/Email" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "EmptyRepository": { @@ -25684,6 +26634,32 @@ "items": { "$ref": "#/definitions/GPGKey" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "GeneralAPISettings": { @@ -25729,6 +26705,32 @@ "items": { "$ref": "#/definitions/GitHook" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "GitTreeResponse": { @@ -25750,6 +26752,32 @@ "items": { "type": "string" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "Hook": { @@ -25765,6 +26793,32 @@ "items": { "$ref": "#/definitions/Hook" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "Issue": { @@ -25786,6 +26840,32 @@ "items": { "$ref": "#/definitions/Issue" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "IssueTemplates": { @@ -25810,6 +26890,32 @@ "items": { "$ref": "#/definitions/Label" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "LabelTemplateInfo": { @@ -25828,6 +26934,32 @@ "items": { "type": "string" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "LanguageStatistics": { @@ -25853,6 +26985,32 @@ "items": { "$ref": "#/definitions/LicensesTemplateListEntry" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "MarkdownRender": { @@ -25880,6 +27038,32 @@ "items": { "$ref": "#/definitions/Milestone" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "NodeInfo": { @@ -25913,6 +27097,32 @@ "items": { "$ref": "#/definitions/NotificationThread" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "OAuth2Application": { @@ -25928,6 +27138,32 @@ "items": { "$ref": "#/definitions/OAuth2Application" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "Organization": { @@ -25943,6 +27179,32 @@ "items": { "$ref": "#/definitions/Organization" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "OrganizationPermissions": { @@ -25964,6 +27226,32 @@ "items": { "$ref": "#/definitions/PackageFile" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "PackageList": { @@ -25973,6 +27261,32 @@ "items": { "$ref": "#/definitions/Package" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "PublicKey": { @@ -25988,6 +27302,32 @@ "items": { "$ref": "#/definitions/PublicKey" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "PullRequest": { @@ -26003,6 +27343,32 @@ "items": { "$ref": "#/definitions/PullRequest" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "PullReview": { @@ -26024,6 +27390,32 @@ "items": { "$ref": "#/definitions/PullReviewComment" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "PullReviewList": { @@ -26033,6 +27425,32 @@ "items": { "$ref": "#/definitions/PullReview" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "PushMirror": { @@ -26048,6 +27466,32 @@ "items": { "$ref": "#/definitions/PushMirror" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "QuotaGroup": { @@ -26060,6 +27504,32 @@ "description": "QuotaGroupList", "schema": { "$ref": "#/definitions/QuotaGroupList" + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "QuotaInfo": { @@ -26081,24 +27551,128 @@ "items": { "$ref": "#/definitions/QuotaRuleInfo" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "QuotaUsedArtifactList": { "description": "QuotaUsedArtifactList", "schema": { "$ref": "#/definitions/QuotaUsedArtifactList" + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "QuotaUsedAttachmentList": { "description": "QuotaUsedAttachmentList", "schema": { "$ref": "#/definitions/QuotaUsedAttachmentList" + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "QuotaUsedPackageList": { "description": "QuotaUsedPackageList", "schema": { "$ref": "#/definitions/QuotaUsedPackageList" + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "Reaction": { @@ -26114,6 +27688,32 @@ "items": { "$ref": "#/definitions/Reaction" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "Reference": { @@ -26129,6 +27729,32 @@ "items": { "$ref": "#/definitions/Reference" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "RegistrationToken": { @@ -26152,6 +27778,32 @@ "items": { "$ref": "#/definitions/Release" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "RepoCollaboratorPermission": { @@ -26191,6 +27843,32 @@ "items": { "$ref": "#/definitions/Repository" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "SearchResults": { @@ -26212,6 +27890,32 @@ "items": { "$ref": "#/definitions/Secret" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "ServerVersion": { @@ -26233,6 +27937,32 @@ "items": { "$ref": "#/definitions/StopWatch" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "StringSlice": { @@ -26257,6 +27987,32 @@ "items": { "$ref": "#/definitions/Tag" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "TagProtection": { @@ -26272,12 +28028,64 @@ "items": { "$ref": "#/definitions/TagProtection" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "TasksList": { "description": "TasksList", "schema": { "$ref": "#/definitions/ActionTaskResponse" + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "Team": { @@ -26293,6 +28101,32 @@ "items": { "$ref": "#/definitions/Team" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "TimelineList": { @@ -26302,6 +28136,32 @@ "items": { "$ref": "#/definitions/TimelineComment" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "TopicListResponse": { @@ -26332,6 +28192,32 @@ "items": { "$ref": "#/definitions/TrackedTime" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "User": { @@ -26356,6 +28242,32 @@ "items": { "$ref": "#/definitions/User" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "UserSettings": { @@ -26371,6 +28283,32 @@ "items": { "$ref": "#/definitions/ActionVariable" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "WatchInfo": { @@ -26383,6 +28321,32 @@ "description": "WikiCommitList", "schema": { "$ref": "#/definitions/WikiCommitList" + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "WikiPage": { @@ -26398,6 +28362,32 @@ "items": { "$ref": "#/definitions/WikiPageMetaData" } + }, + "headers": { + "X-HasMore": { + "type": "boolean", + "description": "True if there is another page" + }, + "X-Page": { + "type": "integer", + "format": "int64", + "description": "The current page" + }, + "X-PageCount": { + "type": "integer", + "format": "int64", + "description": "Total number of pages" + }, + "X-PerPage": { + "type": "integer", + "format": "int64", + "description": "Commits per page" + }, + "X-Total": { + "type": "integer", + "format": "int64", + "description": "Total commit count" + } } }, "boolean": { @@ -26411,49 +28401,32 @@ }, "error": { "description": "APIError is error format response", - "headers": { - "message": { - "type": "string" - }, - "url": { - "type": "string", - "format": "url" - } + "schema": { + "$ref": "#/definitions/APIError" } }, "forbidden": { "description": "APIForbiddenError is a forbidden error response", - "headers": { - "message": { - "type": "string" - }, - "url": { - "type": "string", - "format": "url" - } + "schema": { + "$ref": "#/definitions/APIForbiddenError" } }, "invalidTopicsError": { "description": "APIInvalidTopicsError is error format response to invalid topics", - "headers": { - "invalidTopics": { - "type": "array", - "items": { - "type": "string" - } - }, - "message": { - "type": "string" - } + "schema": { + "$ref": "#/definitions/APIInvalidTopicsError" } }, "notFound": { - "description": "APINotFound is a not found empty response" + "description": "APINotFound is a not found error response", + "schema": { + "$ref": "#/definitions/APINotFound" + } }, "parameterBodies": { "description": "parameterBodies", "schema": { - "$ref": "#/definitions/SetUserQuotaGroupsOptions" + "$ref": "#/definitions/NoteOptions" } }, "quotaExceeded": { @@ -26476,14 +28449,8 @@ }, "repoArchivedError": { "description": "APIRepoArchivedError is an error that is raised when an archived repo should be modified", - "headers": { - "message": { - "type": "string" - }, - "url": { - "type": "string", - "format": "url" - } + "schema": { + "$ref": "#/definitions/APIRepoArchivedError" } }, "string": { @@ -26492,16 +28459,16 @@ "type": "string" } }, + "unauthorized": { + "description": "APIUnauthorizedError is a unauthorized error response", + "schema": { + "$ref": "#/definitions/APIUnauthorizedError" + } + }, "validationError": { "description": "APIValidationError is error format response related to input validation", - "headers": { - "message": { - "type": "string" - }, - "url": { - "type": "string", - "format": "url" - } + "schema": { + "$ref": "#/definitions/APIValidationError" } } }, diff --git a/tests/admin.rs b/tests/admin.rs index 674ca16..4aa7f13 100644 --- a/tests/admin.rs +++ b/tests/admin.rs @@ -25,7 +25,7 @@ async fn user() { .expect("failed to create user"); let query = AdminSearchUsersQuery::default(); - let users = api + let (_, users) = api .admin_search_users(query) .await .expect("failed to search users"); @@ -34,7 +34,7 @@ async fn user() { "could not find new user" ); let query = AdminGetAllEmailsQuery::default(); - let users = api + let (_, users) = api .admin_get_all_emails(query) .await .expect("failed to search emails"); @@ -84,7 +84,7 @@ async fn org() { .expect("failed to create org"); let query = AdminGetAllOrgsQuery::default(); assert!( - !api.admin_get_all_orgs(query).await.unwrap().is_empty(), + !api.admin_get_all_orgs(query).await.unwrap().1.is_empty(), "org list empty" ); let rename_opt = RenameUserOption { @@ -145,7 +145,7 @@ async fn cron() { let api = common::login(); let query = AdminCronListQuery::default(); - let crons = api + let (_, crons) = api .admin_cron_list(query) .await .expect("failed to get crons list"); @@ -236,7 +236,7 @@ async fn quota_group() { .as_ref() .is_some_and(|rules| rules.len() == 1)); - let quota_groups = api + let (_, quota_groups) = api .admin_list_quota_groups() .await .expect("failed to list quota groups"); diff --git a/tests/organization.rs b/tests/organization.rs index c5ced99..8931406 100644 --- a/tests/organization.rs +++ b/tests/organization.rs @@ -18,7 +18,7 @@ async fn org_vars() { api.org_create(org_opt).await.expect("failed to create org"); let query = GetOrgVariablesListQuery::default(); - let var_list = api + let (_, var_list) = api .get_org_variables_list("org-vars", query) .await .expect("failed to list org vars"); diff --git a/tests/repo.rs b/tests/repo.rs index b8e048a..389adba 100644 --- a/tests/repo.rs +++ b/tests/repo.rs @@ -212,6 +212,7 @@ async fn release() { api.repo_list_releases("TestingAdmin", "release-test", query) .await .unwrap() + .1 .is_empty(), "there should be no releases yet" ); @@ -400,7 +401,7 @@ async fn tag_protection() { let git = Git::new("./test_repos/tag-protect"); let _ = basic_repo(&api, &git, "tag-protect").await; - let tag_protections = api + let (_, tag_protections) = api .repo_list_tag_protection("TestingAdmin", "tag-protect") .await .expect("failed to list tag protections"); @@ -455,7 +456,7 @@ async fn repo_vars() { let _ = basic_repo(&api, &git, "repo-vars").await; let query = GetRepoVariablesListQuery::default(); - let var_list = api + let (_, var_list) = api .get_repo_variables_list("TestingAdmin", "repo-vars", query) .await .expect("failed to list repo vars"); diff --git a/tests/user.rs b/tests/user.rs index 51e788a..44d3759 100644 --- a/tests/user.rs +++ b/tests/user.rs @@ -26,14 +26,14 @@ async fn follow() { let api = common::login(); let query = UserListFollowingQuery::default(); - let following = api + let (_, following) = api .user_list_following("TestingAdmin", query) .await .unwrap(); assert!(following.is_empty(), "following list not empty"); let query = UserListFollowersQuery::default(); - let followers = api + let (_, followers) = api .user_list_followers("TestingAdmin", query) .await .unwrap(); @@ -62,14 +62,14 @@ async fn follow() { api.user_current_put_follow("Follower").await.unwrap(); let query = UserListFollowingQuery::default(); - let following = api + let (_, following) = api .user_list_following("TestingAdmin", query) .await .unwrap(); assert!(!following.is_empty(), "following list empty"); let query = UserListFollowersQuery::default(); - let followers = api + let (_, followers) = api .user_list_followers("TestingAdmin", query) .await .unwrap(); @@ -197,7 +197,7 @@ async fn user_vars() { let api = common::login(); let query = GetUserVariablesListQuery::default(); - let var_list = api + let (_, var_list) = api .get_user_variables_list(query) .await .expect("failed to list user vars");