oxidecomputer / oxidecomputer/progenitor
Schema not found, while being present
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 1k
- Forks
- 136
- Avg merge
- 8h 36m
- Merged PRs (30d)
- 14
Description
Summary:
When running progenitor via command-line (cargo progenitor ...) against a PageDuty REST API document (raw json below) I get an error that audit_method_type/schema is missing, however, when searching the json I see "audit_method_type": ... specified.
I am not fully versed in Swagger/OpenAPI specs so I may be missing an issue with the PagerDuty OpenAPI spec itself.
(And, notably, the 52k line spec seems to produce some, but different, failures on everything that ingests it. Sometimes with circular references noted. Working with progenitor is part of how I'm trying to approach the spec. If this looks to ornery to tackle I'll also happily take any suggestions on how to piece out and sub-verify the spec myself. [and bring back any progenitor specific errors afterward])
=============================
Details:
1. nominal OpenAPI version (from json):
3.0.2
2. cargo-progenitor version (from cargo install --list):
v0.6.0
3. raw, commit-connected link:
PagerDuty/api-schema/rest/openapiv3.json
4. command line used:
RUST_BACKTRACE=1 RUST_LOG=trace cargo progenitor --input pagerduty_rest_api_public.json --output pd_rest_progenated --name pd_rest_rs --version 0.1.0
(note: the input file there reads "pagerduty_rest_api_public.json", but should be identical to the canonical "openapiv3.json")
5. output with backtrace:
[2024-05-06T13:33:41Z INFO typify_impl::convert] convert_schema Suggested("AuditRecordMethod_truncated_token") {
"description": "Truncated token containing the last 4 chars of the token's actual value.",
"examples": [
"3xyz"
],
"type": "string"
}
[2024-05-06T13:33:41Z INFO typify_impl::convert] convert_schema Suggested("AuditRecordMethod_type") {
"$ref": "#/components/parameters/audit_method_type/schema"
}
thread 'main' panicked at /Users/esl/.cargo/registry/src/index.crates.io-6f17d22bba15001f/typify-impl-0.0.16/src/convert.rs:1126:32:
$ref #/components/parameters/audit_method_type/schema is missing
stack backtrace:
0: _rust_begin_unwind
1: core::panicking::panic_fmt
2: typify_impl::convert::<impl typify_impl::TypeSpace>::convert_schema_object
3: typify_impl::convert::<impl typify_impl::TypeSpace>::convert_schema
4: typify_impl::TypeSpace::id_for_schema
5: typify_impl::structs::<impl typify_impl::TypeSpace>::struct_property
6: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold
7: <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter
8: core::iter::adapters::try_process
9: typify_impl::structs::<impl typify_impl::TypeSpace>::struct_members
10: typify_impl::convert::<impl typify_impl::TypeSpace>::convert_object
11: typify_impl::convert::<impl typify_impl::TypeSpace>::convert_schema_object
12: typify_impl::convert::<impl typify_impl::TypeSpace>::convert_schema
13: typify_impl::TypeSpace::id_for_schema
14: typify_impl::structs::<impl typify_impl::TypeSpace>::struct_property
15: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold
16: <alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter
17: core::iter::adapters::try_process
18: typify_impl::structs::<impl typify_impl::TypeSpace>::struct_members
19: typify_impl::convert::<impl typify_impl::TypeSpace>::convert_object
20: typify_impl::convert::<impl typify_impl::TypeSpace>::convert_schema_object
21: typify_impl::convert::<impl typify_impl::TypeSpace>::convert_schema
22: typify_impl::TypeSpace::convert_ref_type
23: typify_impl::TypeSpace::add_ref_types
24: progenitor_impl::Generator::generate_tokens
25: cargo_progenitor::main
6. what appears to be the missing schema, in the openapiv3.json:
"audit_method_type": {
"name": "method_type",
"in": "query",
"description": "Method type filter.",
"schema": {
"type": "string",
"description": "Describes the method used to perform the action:\n\n`browser` -- authenticated user session. Session value is not returned in the `truncated_token` field.\n\n`oauth` -- access token obtained via the OAuth flow. Truncated token value is returned in the `truncated_token` field.\n\n`api_token` -- Pagerduty API token. Truncated token value is returned in the `truncated_token` field.\n\n`identity_provider` -- action performed by an Identity provider on behalf of a user. No value is returned in the `truncated_token` field.\n\n`other` -- Method that does not fall in the predefined categories. Truncated token value MAY be returned in the `truncated_token` field.\n",
"enum": [
"browser",
"oauth",
"api_token",
"identity_provider",
"other"
]
}
},
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the failure with the linked PagerDuty openapiv3.json and the shown cargo progenitor command, then inspect the reference handling reported in typify-impl/src/convert.rs around the missing schema panic. Confirm how the parameter's nested schema is resolved and verify that generation completes for this input without the missing-reference panic.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- openapi, rust
- Domain
- api, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100