Skip to content

[Enhancement] Add support for discriminators#174

Merged
sserrata merged 14 commits intomainfrom
handle-discriminators
Jul 29, 2022
Merged

[Enhancement] Add support for discriminators#174
sserrata merged 14 commits intomainfrom
handle-discriminators

Conversation

@sserrata
Copy link
Member

@sserrata sserrata commented Jul 26, 2022

Description

Addresses FR #156

Note: This implementation of discriminators support requires that discriminator mapping be defined. The reason is because we are working with a fully dereferenced OpenAPI object which makes implicit mapping impossible

Note: This implementation will not support discriminators that are self-referential, i.e. they reference properties within their mapping schema(s). The behavior will be to fall back to oneOf if it exists

Motivation and Context

We should do our best to support all polymorphism types, including discriminators.

How Has This Been Tested?

See deploy preview Petstore API for examples.

Screenshots (if appropriate)

Screen Shot 2022-07-26 at 5 53 51 PM

@sserrata sserrata requested review from blindaa121 and csestito July 26, 2022 21:54
@github-actions
Copy link

github-actions bot commented Jul 26, 2022

Size Change: +73.2 kB (+2%)

Total Size: 3.51 MB

Filename Size Change
demo/build/assets/css/styles.********.css 96.2 kB +831 B (+1%)
demo/build/assets/js/006e727e.********.js 12.4 kB +800 B (+7%) 🔍
demo/build/assets/js/0d832478.********.js 25.9 kB +1.65 kB (+7%) 🔍
demo/build/assets/js/12693653.********.js 25.3 kB +1.65 kB (+7%) 🔍
demo/build/assets/js/1e6c5cae.********.js 27.4 kB +3.07 kB (+13%) ⚠️
demo/build/assets/js/3946f914.********.js 27.4 kB +3.04 kB (+12%) ⚠️
demo/build/assets/js/3e0d14e9.********.js 23.4 kB +1.63 kB (+8%) 🔍
demo/build/assets/js/40a238b6.********.js 25.3 kB +1.65 kB (+7%) 🔍
demo/build/assets/js/423cd203.********.js 12.5 kB +800 B (+7%) 🔍
demo/build/assets/js/466ac800.********.js 33.5 kB +3.04 kB (+10%) ⚠️
demo/build/assets/js/4964e910.********.js 24.8 kB +1.63 kB (+7%) 🔍
demo/build/assets/js/55a6d13f.********.js 12.3 kB +800 B (+7%) 🔍
demo/build/assets/js/66c76a57.********.js 27.4 kB +3.07 kB (+13%) ⚠️
demo/build/assets/js/68b61ac5.********.js 33.5 kB +3.07 kB (+10%) ⚠️
demo/build/assets/js/69a61f78.********.js 25.3 kB +1.63 kB (+7%) 🔍
demo/build/assets/js/73b594ee.********.js 27.2 kB +3.07 kB (+13%) ⚠️
demo/build/assets/js/77264a1a.********.js 27.2 kB +3.04 kB (+13%) ⚠️
demo/build/assets/js/7ed7dafe.********.js 25.8 kB +1.65 kB (+7%) 🔍
demo/build/assets/js/86c45737.********.js 23.8 kB +1.65 kB (+7%) 🔍
demo/build/assets/js/8961c7a6.********.js 23.4 kB +1.65 kB (+8%) 🔍
demo/build/assets/js/91696e06.********.js 27.5 kB +3.07 kB (+13%) ⚠️
demo/build/assets/js/97810f3c.********.js 24.9 kB +1.65 kB (+7%) 🔍
demo/build/assets/js/9b5caaf3.********.js 25.2 kB +1.65 kB (+7%) 🔍
demo/build/assets/js/9c42c0f3.********.js 26.9 kB +3.07 kB (+13%) ⚠️
demo/build/assets/js/aa2f1ec7.********.js 23.9 kB +1.63 kB (+7%) 🔍
demo/build/assets/js/ab6072f2.********.js 25.3 kB +1.63 kB (+7%) 🔍
demo/build/assets/js/ae7f40a3.********.js 33.6 kB +3.07 kB (+10%) ⚠️
demo/build/assets/js/b5c059ef.********.js 27 kB +3.07 kB (+13%) ⚠️
demo/build/assets/js/c65697f5.********.js 25.9 kB +1.63 kB (+7%) 🔍
demo/build/assets/js/cf07762b.********.js 23.9 kB +1.65 kB (+7%) 🔍
demo/build/assets/js/common.********.js 144 kB +3.34 kB (+2%)
demo/build/assets/js/dd696920.********.js 24.7 kB +1.65 kB (+7%) 🔍
demo/build/assets/js/e015ccf9.********.js 25.2 kB +1.65 kB (+7%) 🔍
demo/build/assets/js/eae14b71.********.js 26.9 kB +3.04 kB (+13%) ⚠️
demo/build/assets/js/f212caf7.********.js 23.3 kB +1.65 kB (+8%) 🔍
ℹ️ View Unchanged
Filename Size Change
demo/.docusaurus/globalData.json 19 kB 0 B
demo/build/assets/js/05f64ae1.********.js 2.78 kB 0 B
demo/build/assets/js/06b64fc1.********.js 575 B 0 B
demo/build/assets/js/06e5f0f0.********.js 26.9 kB +9 B (0%)
demo/build/assets/js/081bfb0d.********.js 9.78 kB +9 B (0%)
demo/build/assets/js/09e07b87.********.js 2.97 kB 0 B
demo/build/assets/js/14eb3368.********.js 9.19 kB 0 B
demo/build/assets/js/1639936b.********.js 4.05 kB 0 B
demo/build/assets/js/16577668.********.js 387 B 0 B
demo/build/assets/js/177e86db.********.js 10.2 kB +9 B (0%)
demo/build/assets/js/18c41134.********.js 12.7 kB 0 B
demo/build/assets/js/19d75775.********.js 8.48 kB +9 B (0%)
demo/build/assets/js/1a8cc2a6.********.js 11.2 kB +9 B (0%)
demo/build/assets/js/1be78505.********.js 10.3 kB 0 B
demo/build/assets/js/1c54f54e.********.js 10.4 kB +9 B (0%)
demo/build/assets/js/1e4232ab.********.js 3.15 kB 0 B
demo/build/assets/js/1e6ff21d.********.js 10.3 kB +9 B (0%)
demo/build/assets/js/1f818248.********.js 10.9 kB +9 B (0%)
demo/build/assets/js/2c860537.********.js 6.93 kB +9 B (0%)
demo/build/assets/js/326c3861.********.js 9.59 kB 0 B
demo/build/assets/js/3893.********.js 1.07 kB 0 B
demo/build/assets/js/39d00f16.********.js 9.45 kB 0 B
demo/build/assets/js/41cd56a1.********.js 10 kB +9 B (0%)
demo/build/assets/js/46afcded.********.js 8.13 kB 0 B
demo/build/assets/js/46e5c6ac.********.js 6.66 kB 0 B
demo/build/assets/js/47abaca6.********.js 2.88 kB 0 B
demo/build/assets/js/49bd3d39.********.js 14.7 kB +9 B (0%)
demo/build/assets/js/4b891ed6.********.js 10.9 kB +9 B (0%)
demo/build/assets/js/4c5e977b.********.js 30.9 kB 0 B
demo/build/assets/js/533a09ca.********.js 2.48 kB 0 B
demo/build/assets/js/56717cba.********.js 2.96 kB 0 B
demo/build/assets/js/57f1a671.********.js 11 kB +9 B (0%)
demo/build/assets/js/58ff8b1e.********.js 20.7 kB +9 B (0%)
demo/build/assets/js/597ddc40.********.js 9.91 kB +9 B (0%)
demo/build/assets/js/5c868d36.********.js 3.24 kB 0 B
demo/build/assets/js/5fb917be.********.js 2.53 kB +9 B (0%)
demo/build/assets/js/63fc267d.********.js 11 kB +9 B (0%)
demo/build/assets/js/6429.********.js 1.29 MB 0 B
demo/build/assets/js/7ca3ae45.********.js 14.6 kB +9 B (0%)
demo/build/assets/js/822bd8ab.********.js 2.87 kB 0 B
demo/build/assets/js/85d3c400.********.js 2.88 kB 0 B
demo/build/assets/js/85ec4403.********.js 4.44 kB +9 B (0%)
demo/build/assets/js/86b273b1.********.js 9.84 kB +9 B (0%)
demo/build/assets/js/86c346b0.********.js 538 B 0 B
demo/build/assets/js/881db345.********.js 394 B 0 B
demo/build/assets/js/8ab9b16e.********.js 9.6 kB +9 B (0%)
demo/build/assets/js/8d4e78cd.********.js 2.81 kB 0 B
demo/build/assets/js/8f441c78.********.js 9.55 kB 0 B
demo/build/assets/js/93304a97.********.js 4.17 kB 0 B
demo/build/assets/js/935f2afb.********.js 32.2 kB 0 B
demo/build/assets/js/94589c06.********.js 16.4 kB +9 B (0%)
demo/build/assets/js/a40c6d71.********.js 8.58 kB +9 B (0%)
demo/build/assets/js/a5491aaa.********.js 392 B 0 B
demo/build/assets/js/a6cd895f.********.js 20.5 kB +9 B (0%)
demo/build/assets/js/a728d93a.********.js 9.71 kB +9 B (0%)
demo/build/assets/js/ab09fd5c.********.js 20.6 kB +9 B (0%)
demo/build/assets/js/b4ebd305.********.js 14.5 kB +9 B (0%)
demo/build/assets/js/bead4b8e.********.js 3.03 kB 0 B
demo/build/assets/js/bf271e74.********.js 393 B 0 B
demo/build/assets/js/c7a5be9f.********.js 9.93 kB +9 B (0%)
demo/build/assets/js/c7ded1cb.********.js 2.93 kB 0 B
demo/build/assets/js/d63c7029.********.js 2.9 kB 0 B
demo/build/assets/js/dff1c289.********.js 3.88 kB 0 B
demo/build/assets/js/e01f8d18.********.js 8.52 kB +9 B (0%)
demo/build/assets/js/e2ce9793.********.js 398 B 0 B
demo/build/assets/js/e44a2883.********.js 4.53 kB 0 B
demo/build/assets/js/e5e5340c.********.js 2.46 kB +9 B (0%)
demo/build/assets/js/e8b309fb.********.js 577 B 0 B
demo/build/assets/js/eaf4471e.********.js 11.1 kB +9 B (0%)
demo/build/assets/js/ecc39b49.********.js 172 B 0 B
demo/build/assets/js/ee308fa3.********.js 10.1 kB +9 B (0%)
demo/build/assets/js/f4486b6b.********.js 11.3 kB +9 B (0%)
demo/build/assets/js/f55d3e7a.********.js 2.7 kB 0 B
demo/build/assets/js/f65290a6.********.js 9.73 kB +9 B (0%)
demo/build/assets/js/f8409a7e.********.js 29 kB 0 B
demo/build/assets/js/f84e10c2.********.js 16.6 kB +9 B (0%)
demo/build/assets/js/fe97f0d1.********.js 16.6 kB +9 B (0%)
demo/build/assets/js/main.********.js 396 kB 0 B
demo/build/assets/js/runtime~main.********.js 8.67 kB 0 B
demo/build/index.html 79.9 kB 0 B

compressed-size-action

@github-actions
Copy link

github-actions bot commented Jul 26, 2022

Visit the preview URL for this PR (updated for commit 10268b4):

https://docusaurus-openapi-36b86--pr174-3t1vn2no.web.app

(expires Sat, 27 Aug 2022 18:15:50 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

@sserrata
Copy link
Member Author

I reordered the description and qualifier and removed the margin-top for consistency.

Screen Shot 2022-07-27 at 8 55 56 AM

I also took one more pass at ensuring there will be nested support for discriminators. Since it's basically handled in createProperties, we should support them even when they are nested inside any other schema type, e.g. allOf, anyOf, etc.

@sserrata
Copy link
Member Author

Initially, we were only handling discriminators that mapped directly to a property at the same level as the discriminator. The recent push adds support for discriminators that map to a property inside the discriminator mapping schema itself.

Example 1:

Screen.Recording.2022-07-28.at.7.32.28.AM.mov

Example 2:

Screen.Recording.2022-07-28.at.7.33.39.AM.mov

@sserrata sserrata merged commit 9eccd56 into main Jul 29, 2022
@sserrata sserrata deleted the handle-discriminators branch July 29, 2022 13:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants