Integrating reqwest's async module as a rust module - #4175

Closed
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements
Closed

Integrating reqwest's async module as a rust module#4175
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements

Conversation

@srenauld

Copy link
Copy Markdown

This commit contains modifications to the Rust codegen module in order to be able to generate futures-aware, threadsafe reqwest bindings from an openAPI template, in order to be able to take advantage of non-blocking API calls.

The changes are as follows:

  • Added a library reqwestFutures
  • Dependency changes in Cargo.toml (futures is now a dependency for reqwest when using this library
  • Due to the requirement that all futures should be Send, the reference-counting pointer is now an Arc
  • Templates, evidently. They're very similar to the reqwest module itself, as the API from the sync and async client are virtually the same

Due to the upcoming changes regarding async/await, I took the deliberate decision of calling the library reqwestFutures rather than reqwestAsync. When Rust 1.39 lands and those features become stable, a conversion tool from one to the other should be easy to build.

Rust committee members are @frol@farcaller@bjgill@richardwhiuk - since this is my first PR here, I guess mentioning them should be good enough as a CC?

This commit contains modifications to the Rust codegen module in order
to be able to generate futures-aware, threadsafe `reqwest` bindings
from an openAPI template, in order to be able to take advantage
of non-blocking API calls.
@bcourtine

Copy link
Copy Markdown
Contributor

Hi @srenauld ,

This PR looks interesting.

A technical point: since it is a new generator library, you should add a generation code for this library in the bin/rust-petstore.sh script, and also commit generated files (which will be checked by the continuous integration).

Personnaly, I was waiting Rust 1.39 to use reqwestAsync, but it is just a personal opinion. ;)

@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine !

Thank you for the feedback.

I deliberately left that name so we can have both; for instance, I commonly work with processor architectures where rust 1.39 is a no-go but futures are perfectly fine, and as such, would benefit from having the option to have either. That's why I laid it out the way I did. After all, I'm also pretty sure I am not the only one in this case.

I will add a generation code and some tests to cover everything. I wasn't sure what I had to do next - now I know :-)

I was not aware that openapi-generator could generate multipart MIME bindings.
Implementing them was complicated further by `reqwest::async::multipart::Form` having
an entirely different API than the `sync` version of it, leading to two decisions:
1. The file is read in its entirety. This is the same behavior as on the sync version;
if time allows, I will convert this into a chunked stream
2. The entire mime detection logic is taken from the `sync` version and added as a
private function in the module
@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine,

I added a full client sample, which also revealed a feature I was not aware of - MIME file uploads. That's also done now.

Throughout this time I've struggled with some teething CI problems, including:

  • timeouts on drone
  • issues on travis such as the following: Could not transfer artifact org.openapitools:openapi-generator-maven-plugin:pom:4.1.3-SNAPSHOT from/to sonatype-snapshots (https://oss.sonatype.org/content/repositories/snapshots/): Failed to transfer file https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-maven-plugin/4.1.3-SNAPSHOT/openapi-generator-maven-plugin-4.1.3-SNAPSHOT.pom with status code 502
  • An unknown issue regarding the R generator on circleCI

Is there any chance you could have a quick look and tell me if there's something obvious that I am missing and/or re-run the CI to see if the travis error was just intermittent? Would be greatly appreciated :-)

@ctaggart

Copy link
Copy Markdown

It looks to me like this pull request address #3865, but should probably be closed in favor of #4210 which will update to reqwest 0.10 once that ships.

@srenauld

Copy link
Copy Markdown
Author

@ctaggart As explained in the initial PR comment, I'd personally be in favor of keeping both (as in, pre-1.39 futures-based, and post-1.39 async/await), even if the futures-based implementation is on life support.

Let me give you an example. In the past three years I've built, developed and released a few products running on a processor from ARM that you literally cannot use anything beyond the nightly from november 30th 2018 with. The reason being that a breaking change between 1.32 and 1.33 happened - I never properly dug down why, but I know it is related to atomic operation emulation (something which this specific processor needs).

For that reason, even though the async/await version is "newer", it is also inaccessible to those clients, even though old-school futures themselves are, as is a lot of the Rust ecosystem. And for that reason, for such requirements where one cannot use the mainline, greenest possible compiler, I would personally be in favor of doing both.

@wing328

Copy link
Copy Markdown
Member

@srenauld I've added an option to support async operations in the Rust reqwest client.

I wonder if you can pull the latest master to give it a try.

@wing328

Copy link
Copy Markdown
Member

Closing as there's no update.

@wing328wing328 closed this Jan 25, 2021
Sign up for freeto 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.

4 participants

@srenauld@bcourtine@ctaggart@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Integrating reqwest's async module as a rust module - #4175

Closed
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements
Closed

Integrating reqwest's async module as a rust module#4175
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements

Conversation

@srenauld

Copy link
Copy Markdown

This commit contains modifications to the Rust codegen module in order to be able to generate futures-aware, threadsafe reqwest bindings from an openAPI template, in order to be able to take advantage of non-blocking API calls.

The changes are as follows:

  • Added a library reqwestFutures
  • Dependency changes in Cargo.toml (futures is now a dependency for reqwest when using this library
  • Due to the requirement that all futures should be Send, the reference-counting pointer is now an Arc
  • Templates, evidently. They're very similar to the reqwest module itself, as the API from the sync and async client are virtually the same

Due to the upcoming changes regarding async/await, I took the deliberate decision of calling the library reqwestFutures rather than reqwestAsync. When Rust 1.39 lands and those features become stable, a conversion tool from one to the other should be easy to build.

Rust committee members are @frol@farcaller@bjgill@richardwhiuk - since this is my first PR here, I guess mentioning them should be good enough as a CC?

This commit contains modifications to the Rust codegen module in order
to be able to generate futures-aware, threadsafe `reqwest` bindings
from an openAPI template, in order to be able to take advantage
of non-blocking API calls.
@bcourtine

Copy link
Copy Markdown
Contributor

Hi @srenauld ,

This PR looks interesting.

A technical point: since it is a new generator library, you should add a generation code for this library in the bin/rust-petstore.sh script, and also commit generated files (which will be checked by the continuous integration).

Personnaly, I was waiting Rust 1.39 to use reqwestAsync, but it is just a personal opinion. ;)

@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine !

Thank you for the feedback.

I deliberately left that name so we can have both; for instance, I commonly work with processor architectures where rust 1.39 is a no-go but futures are perfectly fine, and as such, would benefit from having the option to have either. That's why I laid it out the way I did. After all, I'm also pretty sure I am not the only one in this case.

I will add a generation code and some tests to cover everything. I wasn't sure what I had to do next - now I know :-)

I was not aware that openapi-generator could generate multipart MIME bindings.
Implementing them was complicated further by `reqwest::async::multipart::Form` having
an entirely different API than the `sync` version of it, leading to two decisions:
1. The file is read in its entirety. This is the same behavior as on the sync version;
if time allows, I will convert this into a chunked stream
2. The entire mime detection logic is taken from the `sync` version and added as a
private function in the module
@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine,

I added a full client sample, which also revealed a feature I was not aware of - MIME file uploads. That's also done now.

Throughout this time I've struggled with some teething CI problems, including:

  • timeouts on drone
  • issues on travis such as the following: Could not transfer artifact org.openapitools:openapi-generator-maven-plugin:pom:4.1.3-SNAPSHOT from/to sonatype-snapshots (https://oss.sonatype.org/content/repositories/snapshots/): Failed to transfer file https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-maven-plugin/4.1.3-SNAPSHOT/openapi-generator-maven-plugin-4.1.3-SNAPSHOT.pom with status code 502
  • An unknown issue regarding the R generator on circleCI

Is there any chance you could have a quick look and tell me if there's something obvious that I am missing and/or re-run the CI to see if the travis error was just intermittent? Would be greatly appreciated :-)

@ctaggart

Copy link
Copy Markdown

It looks to me like this pull request address #3865, but should probably be closed in favor of #4210 which will update to reqwest 0.10 once that ships.

@srenauld

Copy link
Copy Markdown
Author

@ctaggart As explained in the initial PR comment, I'd personally be in favor of keeping both (as in, pre-1.39 futures-based, and post-1.39 async/await), even if the futures-based implementation is on life support.

Let me give you an example. In the past three years I've built, developed and released a few products running on a processor from ARM that you literally cannot use anything beyond the nightly from november 30th 2018 with. The reason being that a breaking change between 1.32 and 1.33 happened - I never properly dug down why, but I know it is related to atomic operation emulation (something which this specific processor needs).

For that reason, even though the async/await version is "newer", it is also inaccessible to those clients, even though old-school futures themselves are, as is a lot of the Rust ecosystem. And for that reason, for such requirements where one cannot use the mainline, greenest possible compiler, I would personally be in favor of doing both.

@wing328

Copy link
Copy Markdown
Member

@srenauld I've added an option to support async operations in the Rust reqwest client.

I wonder if you can pull the latest master to give it a try.

@wing328

Copy link
Copy Markdown
Member

Closing as there's no update.

@wing328wing328 closed this Jan 25, 2021
Sign up for freeto 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.

4 participants

@srenauld@bcourtine@ctaggart@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Integrating reqwest's async module as a rust module - #4175

Closed
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements
Closed

Integrating reqwest's async module as a rust module#4175
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements

Conversation

@srenauld

Copy link
Copy Markdown

This commit contains modifications to the Rust codegen module in order to be able to generate futures-aware, threadsafe reqwest bindings from an openAPI template, in order to be able to take advantage of non-blocking API calls.

The changes are as follows:

  • Added a library reqwestFutures
  • Dependency changes in Cargo.toml (futures is now a dependency for reqwest when using this library
  • Due to the requirement that all futures should be Send, the reference-counting pointer is now an Arc
  • Templates, evidently. They're very similar to the reqwest module itself, as the API from the sync and async client are virtually the same

Due to the upcoming changes regarding async/await, I took the deliberate decision of calling the library reqwestFutures rather than reqwestAsync. When Rust 1.39 lands and those features become stable, a conversion tool from one to the other should be easy to build.

Rust committee members are @frol@farcaller@bjgill@richardwhiuk - since this is my first PR here, I guess mentioning them should be good enough as a CC?

This commit contains modifications to the Rust codegen module in order
to be able to generate futures-aware, threadsafe `reqwest` bindings
from an openAPI template, in order to be able to take advantage
of non-blocking API calls.
@bcourtine

Copy link
Copy Markdown
Contributor

Hi @srenauld ,

This PR looks interesting.

A technical point: since it is a new generator library, you should add a generation code for this library in the bin/rust-petstore.sh script, and also commit generated files (which will be checked by the continuous integration).

Personnaly, I was waiting Rust 1.39 to use reqwestAsync, but it is just a personal opinion. ;)

@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine !

Thank you for the feedback.

I deliberately left that name so we can have both; for instance, I commonly work with processor architectures where rust 1.39 is a no-go but futures are perfectly fine, and as such, would benefit from having the option to have either. That's why I laid it out the way I did. After all, I'm also pretty sure I am not the only one in this case.

I will add a generation code and some tests to cover everything. I wasn't sure what I had to do next - now I know :-)

I was not aware that openapi-generator could generate multipart MIME bindings.
Implementing them was complicated further by `reqwest::async::multipart::Form` having
an entirely different API than the `sync` version of it, leading to two decisions:
1. The file is read in its entirety. This is the same behavior as on the sync version;
if time allows, I will convert this into a chunked stream
2. The entire mime detection logic is taken from the `sync` version and added as a
private function in the module
@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine,

I added a full client sample, which also revealed a feature I was not aware of - MIME file uploads. That's also done now.

Throughout this time I've struggled with some teething CI problems, including:

  • timeouts on drone
  • issues on travis such as the following: Could not transfer artifact org.openapitools:openapi-generator-maven-plugin:pom:4.1.3-SNAPSHOT from/to sonatype-snapshots (https://oss.sonatype.org/content/repositories/snapshots/): Failed to transfer file https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-maven-plugin/4.1.3-SNAPSHOT/openapi-generator-maven-plugin-4.1.3-SNAPSHOT.pom with status code 502
  • An unknown issue regarding the R generator on circleCI

Is there any chance you could have a quick look and tell me if there's something obvious that I am missing and/or re-run the CI to see if the travis error was just intermittent? Would be greatly appreciated :-)

@ctaggart

Copy link
Copy Markdown

It looks to me like this pull request address #3865, but should probably be closed in favor of #4210 which will update to reqwest 0.10 once that ships.

@srenauld

Copy link
Copy Markdown
Author

@ctaggart As explained in the initial PR comment, I'd personally be in favor of keeping both (as in, pre-1.39 futures-based, and post-1.39 async/await), even if the futures-based implementation is on life support.

Let me give you an example. In the past three years I've built, developed and released a few products running on a processor from ARM that you literally cannot use anything beyond the nightly from november 30th 2018 with. The reason being that a breaking change between 1.32 and 1.33 happened - I never properly dug down why, but I know it is related to atomic operation emulation (something which this specific processor needs).

For that reason, even though the async/await version is "newer", it is also inaccessible to those clients, even though old-school futures themselves are, as is a lot of the Rust ecosystem. And for that reason, for such requirements where one cannot use the mainline, greenest possible compiler, I would personally be in favor of doing both.

@wing328

Copy link
Copy Markdown
Member

@srenauld I've added an option to support async operations in the Rust reqwest client.

I wonder if you can pull the latest master to give it a try.

@wing328

Copy link
Copy Markdown
Member

Closing as there's no update.

@wing328wing328 closed this Jan 25, 2021
Sign up for freeto 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.

4 participants

@srenauld@bcourtine@ctaggart@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Integrating reqwest's async module as a rust module - #4175

Closed
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements
Closed

Integrating reqwest's async module as a rust module#4175
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements

Conversation

@srenauld

Copy link
Copy Markdown

This commit contains modifications to the Rust codegen module in order to be able to generate futures-aware, threadsafe reqwest bindings from an openAPI template, in order to be able to take advantage of non-blocking API calls.

The changes are as follows:

  • Added a library reqwestFutures
  • Dependency changes in Cargo.toml (futures is now a dependency for reqwest when using this library
  • Due to the requirement that all futures should be Send, the reference-counting pointer is now an Arc
  • Templates, evidently. They're very similar to the reqwest module itself, as the API from the sync and async client are virtually the same

Due to the upcoming changes regarding async/await, I took the deliberate decision of calling the library reqwestFutures rather than reqwestAsync. When Rust 1.39 lands and those features become stable, a conversion tool from one to the other should be easy to build.

Rust committee members are @frol@farcaller@bjgill@richardwhiuk - since this is my first PR here, I guess mentioning them should be good enough as a CC?

This commit contains modifications to the Rust codegen module in order
to be able to generate futures-aware, threadsafe `reqwest` bindings
from an openAPI template, in order to be able to take advantage
of non-blocking API calls.
@bcourtine

Copy link
Copy Markdown
Contributor

Hi @srenauld ,

This PR looks interesting.

A technical point: since it is a new generator library, you should add a generation code for this library in the bin/rust-petstore.sh script, and also commit generated files (which will be checked by the continuous integration).

Personnaly, I was waiting Rust 1.39 to use reqwestAsync, but it is just a personal opinion. ;)

@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine !

Thank you for the feedback.

I deliberately left that name so we can have both; for instance, I commonly work with processor architectures where rust 1.39 is a no-go but futures are perfectly fine, and as such, would benefit from having the option to have either. That's why I laid it out the way I did. After all, I'm also pretty sure I am not the only one in this case.

I will add a generation code and some tests to cover everything. I wasn't sure what I had to do next - now I know :-)

I was not aware that openapi-generator could generate multipart MIME bindings.
Implementing them was complicated further by `reqwest::async::multipart::Form` having
an entirely different API than the `sync` version of it, leading to two decisions:
1. The file is read in its entirety. This is the same behavior as on the sync version;
if time allows, I will convert this into a chunked stream
2. The entire mime detection logic is taken from the `sync` version and added as a
private function in the module
@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine,

I added a full client sample, which also revealed a feature I was not aware of - MIME file uploads. That's also done now.

Throughout this time I've struggled with some teething CI problems, including:

  • timeouts on drone
  • issues on travis such as the following: Could not transfer artifact org.openapitools:openapi-generator-maven-plugin:pom:4.1.3-SNAPSHOT from/to sonatype-snapshots (https://oss.sonatype.org/content/repositories/snapshots/): Failed to transfer file https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-maven-plugin/4.1.3-SNAPSHOT/openapi-generator-maven-plugin-4.1.3-SNAPSHOT.pom with status code 502
  • An unknown issue regarding the R generator on circleCI

Is there any chance you could have a quick look and tell me if there's something obvious that I am missing and/or re-run the CI to see if the travis error was just intermittent? Would be greatly appreciated :-)

@ctaggart

Copy link
Copy Markdown

It looks to me like this pull request address #3865, but should probably be closed in favor of #4210 which will update to reqwest 0.10 once that ships.

@srenauld

Copy link
Copy Markdown
Author

@ctaggart As explained in the initial PR comment, I'd personally be in favor of keeping both (as in, pre-1.39 futures-based, and post-1.39 async/await), even if the futures-based implementation is on life support.

Let me give you an example. In the past three years I've built, developed and released a few products running on a processor from ARM that you literally cannot use anything beyond the nightly from november 30th 2018 with. The reason being that a breaking change between 1.32 and 1.33 happened - I never properly dug down why, but I know it is related to atomic operation emulation (something which this specific processor needs).

For that reason, even though the async/await version is "newer", it is also inaccessible to those clients, even though old-school futures themselves are, as is a lot of the Rust ecosystem. And for that reason, for such requirements where one cannot use the mainline, greenest possible compiler, I would personally be in favor of doing both.

@wing328

Copy link
Copy Markdown
Member

@srenauld I've added an option to support async operations in the Rust reqwest client.

I wonder if you can pull the latest master to give it a try.

@wing328

Copy link
Copy Markdown
Member

Closing as there's no update.

@wing328wing328 closed this Jan 25, 2021
Sign up for freeto 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.

4 participants

@srenauld@bcourtine@ctaggart@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Integrating reqwest's async module as a rust module - #4175

Closed
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements
Closed

Integrating reqwest's async module as a rust module#4175
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements

Conversation

@srenauld

Copy link
Copy Markdown

This commit contains modifications to the Rust codegen module in order to be able to generate futures-aware, threadsafe reqwest bindings from an openAPI template, in order to be able to take advantage of non-blocking API calls.

The changes are as follows:

  • Added a library reqwestFutures
  • Dependency changes in Cargo.toml (futures is now a dependency for reqwest when using this library
  • Due to the requirement that all futures should be Send, the reference-counting pointer is now an Arc
  • Templates, evidently. They're very similar to the reqwest module itself, as the API from the sync and async client are virtually the same

Due to the upcoming changes regarding async/await, I took the deliberate decision of calling the library reqwestFutures rather than reqwestAsync. When Rust 1.39 lands and those features become stable, a conversion tool from one to the other should be easy to build.

Rust committee members are @frol@farcaller@bjgill@richardwhiuk - since this is my first PR here, I guess mentioning them should be good enough as a CC?

This commit contains modifications to the Rust codegen module in order
to be able to generate futures-aware, threadsafe `reqwest` bindings
from an openAPI template, in order to be able to take advantage
of non-blocking API calls.
@bcourtine

Copy link
Copy Markdown
Contributor

Hi @srenauld ,

This PR looks interesting.

A technical point: since it is a new generator library, you should add a generation code for this library in the bin/rust-petstore.sh script, and also commit generated files (which will be checked by the continuous integration).

Personnaly, I was waiting Rust 1.39 to use reqwestAsync, but it is just a personal opinion. ;)

@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine !

Thank you for the feedback.

I deliberately left that name so we can have both; for instance, I commonly work with processor architectures where rust 1.39 is a no-go but futures are perfectly fine, and as such, would benefit from having the option to have either. That's why I laid it out the way I did. After all, I'm also pretty sure I am not the only one in this case.

I will add a generation code and some tests to cover everything. I wasn't sure what I had to do next - now I know :-)

I was not aware that openapi-generator could generate multipart MIME bindings.
Implementing them was complicated further by `reqwest::async::multipart::Form` having
an entirely different API than the `sync` version of it, leading to two decisions:
1. The file is read in its entirety. This is the same behavior as on the sync version;
if time allows, I will convert this into a chunked stream
2. The entire mime detection logic is taken from the `sync` version and added as a
private function in the module
@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine,

I added a full client sample, which also revealed a feature I was not aware of - MIME file uploads. That's also done now.

Throughout this time I've struggled with some teething CI problems, including:

  • timeouts on drone
  • issues on travis such as the following: Could not transfer artifact org.openapitools:openapi-generator-maven-plugin:pom:4.1.3-SNAPSHOT from/to sonatype-snapshots (https://oss.sonatype.org/content/repositories/snapshots/): Failed to transfer file https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-maven-plugin/4.1.3-SNAPSHOT/openapi-generator-maven-plugin-4.1.3-SNAPSHOT.pom with status code 502
  • An unknown issue regarding the R generator on circleCI

Is there any chance you could have a quick look and tell me if there's something obvious that I am missing and/or re-run the CI to see if the travis error was just intermittent? Would be greatly appreciated :-)

@ctaggart

Copy link
Copy Markdown

It looks to me like this pull request address #3865, but should probably be closed in favor of #4210 which will update to reqwest 0.10 once that ships.

@srenauld

Copy link
Copy Markdown
Author

@ctaggart As explained in the initial PR comment, I'd personally be in favor of keeping both (as in, pre-1.39 futures-based, and post-1.39 async/await), even if the futures-based implementation is on life support.

Let me give you an example. In the past three years I've built, developed and released a few products running on a processor from ARM that you literally cannot use anything beyond the nightly from november 30th 2018 with. The reason being that a breaking change between 1.32 and 1.33 happened - I never properly dug down why, but I know it is related to atomic operation emulation (something which this specific processor needs).

For that reason, even though the async/await version is "newer", it is also inaccessible to those clients, even though old-school futures themselves are, as is a lot of the Rust ecosystem. And for that reason, for such requirements where one cannot use the mainline, greenest possible compiler, I would personally be in favor of doing both.

@wing328

Copy link
Copy Markdown
Member

@srenauld I've added an option to support async operations in the Rust reqwest client.

I wonder if you can pull the latest master to give it a try.

@wing328

Copy link
Copy Markdown
Member

Closing as there's no update.

@wing328wing328 closed this Jan 25, 2021
Sign up for freeto 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.

4 participants

@srenauld@bcourtine@ctaggart@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Integrating reqwest's async module as a rust module - #4175

Closed
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements
Closed

Integrating reqwest's async module as a rust module#4175
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements

Conversation

@srenauld

Copy link
Copy Markdown

This commit contains modifications to the Rust codegen module in order to be able to generate futures-aware, threadsafe reqwest bindings from an openAPI template, in order to be able to take advantage of non-blocking API calls.

The changes are as follows:

  • Added a library reqwestFutures
  • Dependency changes in Cargo.toml (futures is now a dependency for reqwest when using this library
  • Due to the requirement that all futures should be Send, the reference-counting pointer is now an Arc
  • Templates, evidently. They're very similar to the reqwest module itself, as the API from the sync and async client are virtually the same

Due to the upcoming changes regarding async/await, I took the deliberate decision of calling the library reqwestFutures rather than reqwestAsync. When Rust 1.39 lands and those features become stable, a conversion tool from one to the other should be easy to build.

Rust committee members are @frol@farcaller@bjgill@richardwhiuk - since this is my first PR here, I guess mentioning them should be good enough as a CC?

This commit contains modifications to the Rust codegen module in order
to be able to generate futures-aware, threadsafe `reqwest` bindings
from an openAPI template, in order to be able to take advantage
of non-blocking API calls.
@bcourtine

Copy link
Copy Markdown
Contributor

Hi @srenauld ,

This PR looks interesting.

A technical point: since it is a new generator library, you should add a generation code for this library in the bin/rust-petstore.sh script, and also commit generated files (which will be checked by the continuous integration).

Personnaly, I was waiting Rust 1.39 to use reqwestAsync, but it is just a personal opinion. ;)

@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine !

Thank you for the feedback.

I deliberately left that name so we can have both; for instance, I commonly work with processor architectures where rust 1.39 is a no-go but futures are perfectly fine, and as such, would benefit from having the option to have either. That's why I laid it out the way I did. After all, I'm also pretty sure I am not the only one in this case.

I will add a generation code and some tests to cover everything. I wasn't sure what I had to do next - now I know :-)

I was not aware that openapi-generator could generate multipart MIME bindings.
Implementing them was complicated further by `reqwest::async::multipart::Form` having
an entirely different API than the `sync` version of it, leading to two decisions:
1. The file is read in its entirety. This is the same behavior as on the sync version;
if time allows, I will convert this into a chunked stream
2. The entire mime detection logic is taken from the `sync` version and added as a
private function in the module
@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine,

I added a full client sample, which also revealed a feature I was not aware of - MIME file uploads. That's also done now.

Throughout this time I've struggled with some teething CI problems, including:

  • timeouts on drone
  • issues on travis such as the following: Could not transfer artifact org.openapitools:openapi-generator-maven-plugin:pom:4.1.3-SNAPSHOT from/to sonatype-snapshots (https://oss.sonatype.org/content/repositories/snapshots/): Failed to transfer file https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-maven-plugin/4.1.3-SNAPSHOT/openapi-generator-maven-plugin-4.1.3-SNAPSHOT.pom with status code 502
  • An unknown issue regarding the R generator on circleCI

Is there any chance you could have a quick look and tell me if there's something obvious that I am missing and/or re-run the CI to see if the travis error was just intermittent? Would be greatly appreciated :-)

@ctaggart

Copy link
Copy Markdown

It looks to me like this pull request address #3865, but should probably be closed in favor of #4210 which will update to reqwest 0.10 once that ships.

@srenauld

Copy link
Copy Markdown
Author

@ctaggart As explained in the initial PR comment, I'd personally be in favor of keeping both (as in, pre-1.39 futures-based, and post-1.39 async/await), even if the futures-based implementation is on life support.

Let me give you an example. In the past three years I've built, developed and released a few products running on a processor from ARM that you literally cannot use anything beyond the nightly from november 30th 2018 with. The reason being that a breaking change between 1.32 and 1.33 happened - I never properly dug down why, but I know it is related to atomic operation emulation (something which this specific processor needs).

For that reason, even though the async/await version is "newer", it is also inaccessible to those clients, even though old-school futures themselves are, as is a lot of the Rust ecosystem. And for that reason, for such requirements where one cannot use the mainline, greenest possible compiler, I would personally be in favor of doing both.

@wing328

Copy link
Copy Markdown
Member

@srenauld I've added an option to support async operations in the Rust reqwest client.

I wonder if you can pull the latest master to give it a try.

@wing328

Copy link
Copy Markdown
Member

Closing as there's no update.

@wing328wing328 closed this Jan 25, 2021
Sign up for freeto 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.

4 participants

@srenauld@bcourtine@ctaggart@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Integrating reqwest's async module as a rust module - #4175

Closed
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements
Closed

Integrating reqwest's async module as a rust module#4175
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements

Conversation

@srenauld

Copy link
Copy Markdown

This commit contains modifications to the Rust codegen module in order to be able to generate futures-aware, threadsafe reqwest bindings from an openAPI template, in order to be able to take advantage of non-blocking API calls.

The changes are as follows:

  • Added a library reqwestFutures
  • Dependency changes in Cargo.toml (futures is now a dependency for reqwest when using this library
  • Due to the requirement that all futures should be Send, the reference-counting pointer is now an Arc
  • Templates, evidently. They're very similar to the reqwest module itself, as the API from the sync and async client are virtually the same

Due to the upcoming changes regarding async/await, I took the deliberate decision of calling the library reqwestFutures rather than reqwestAsync. When Rust 1.39 lands and those features become stable, a conversion tool from one to the other should be easy to build.

Rust committee members are @frol@farcaller@bjgill@richardwhiuk - since this is my first PR here, I guess mentioning them should be good enough as a CC?

This commit contains modifications to the Rust codegen module in order
to be able to generate futures-aware, threadsafe `reqwest` bindings
from an openAPI template, in order to be able to take advantage
of non-blocking API calls.
@bcourtine

Copy link
Copy Markdown
Contributor

Hi @srenauld ,

This PR looks interesting.

A technical point: since it is a new generator library, you should add a generation code for this library in the bin/rust-petstore.sh script, and also commit generated files (which will be checked by the continuous integration).

Personnaly, I was waiting Rust 1.39 to use reqwestAsync, but it is just a personal opinion. ;)

@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine !

Thank you for the feedback.

I deliberately left that name so we can have both; for instance, I commonly work with processor architectures where rust 1.39 is a no-go but futures are perfectly fine, and as such, would benefit from having the option to have either. That's why I laid it out the way I did. After all, I'm also pretty sure I am not the only one in this case.

I will add a generation code and some tests to cover everything. I wasn't sure what I had to do next - now I know :-)

I was not aware that openapi-generator could generate multipart MIME bindings.
Implementing them was complicated further by `reqwest::async::multipart::Form` having
an entirely different API than the `sync` version of it, leading to two decisions:
1. The file is read in its entirety. This is the same behavior as on the sync version;
if time allows, I will convert this into a chunked stream
2. The entire mime detection logic is taken from the `sync` version and added as a
private function in the module
@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine,

I added a full client sample, which also revealed a feature I was not aware of - MIME file uploads. That's also done now.

Throughout this time I've struggled with some teething CI problems, including:

  • timeouts on drone
  • issues on travis such as the following: Could not transfer artifact org.openapitools:openapi-generator-maven-plugin:pom:4.1.3-SNAPSHOT from/to sonatype-snapshots (https://oss.sonatype.org/content/repositories/snapshots/): Failed to transfer file https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-maven-plugin/4.1.3-SNAPSHOT/openapi-generator-maven-plugin-4.1.3-SNAPSHOT.pom with status code 502
  • An unknown issue regarding the R generator on circleCI

Is there any chance you could have a quick look and tell me if there's something obvious that I am missing and/or re-run the CI to see if the travis error was just intermittent? Would be greatly appreciated :-)

@ctaggart

Copy link
Copy Markdown

It looks to me like this pull request address #3865, but should probably be closed in favor of #4210 which will update to reqwest 0.10 once that ships.

@srenauld

Copy link
Copy Markdown
Author

@ctaggart As explained in the initial PR comment, I'd personally be in favor of keeping both (as in, pre-1.39 futures-based, and post-1.39 async/await), even if the futures-based implementation is on life support.

Let me give you an example. In the past three years I've built, developed and released a few products running on a processor from ARM that you literally cannot use anything beyond the nightly from november 30th 2018 with. The reason being that a breaking change between 1.32 and 1.33 happened - I never properly dug down why, but I know it is related to atomic operation emulation (something which this specific processor needs).

For that reason, even though the async/await version is "newer", it is also inaccessible to those clients, even though old-school futures themselves are, as is a lot of the Rust ecosystem. And for that reason, for such requirements where one cannot use the mainline, greenest possible compiler, I would personally be in favor of doing both.

@wing328

Copy link
Copy Markdown
Member

@srenauld I've added an option to support async operations in the Rust reqwest client.

I wonder if you can pull the latest master to give it a try.

@wing328

Copy link
Copy Markdown
Member

Closing as there's no update.

@wing328wing328 closed this Jan 25, 2021
Sign up for freeto 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.

4 participants

@srenauld@bcourtine@ctaggart@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Integrating reqwest's async module as a rust module - #4175

Closed
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements
Closed

Integrating reqwest's async module as a rust module#4175
srenauld wants to merge 4 commits into
OpenAPITools:masterfrom
srenauld:rust-improvements

Conversation

@srenauld

Copy link
Copy Markdown

This commit contains modifications to the Rust codegen module in order to be able to generate futures-aware, threadsafe reqwest bindings from an openAPI template, in order to be able to take advantage of non-blocking API calls.

The changes are as follows:

  • Added a library reqwestFutures
  • Dependency changes in Cargo.toml (futures is now a dependency for reqwest when using this library
  • Due to the requirement that all futures should be Send, the reference-counting pointer is now an Arc
  • Templates, evidently. They're very similar to the reqwest module itself, as the API from the sync and async client are virtually the same

Due to the upcoming changes regarding async/await, I took the deliberate decision of calling the library reqwestFutures rather than reqwestAsync. When Rust 1.39 lands and those features become stable, a conversion tool from one to the other should be easy to build.

Rust committee members are @frol@farcaller@bjgill@richardwhiuk - since this is my first PR here, I guess mentioning them should be good enough as a CC?

This commit contains modifications to the Rust codegen module in order
to be able to generate futures-aware, threadsafe `reqwest` bindings
from an openAPI template, in order to be able to take advantage
of non-blocking API calls.
@bcourtine

Copy link
Copy Markdown
Contributor

Hi @srenauld ,

This PR looks interesting.

A technical point: since it is a new generator library, you should add a generation code for this library in the bin/rust-petstore.sh script, and also commit generated files (which will be checked by the continuous integration).

Personnaly, I was waiting Rust 1.39 to use reqwestAsync, but it is just a personal opinion. ;)

@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine !

Thank you for the feedback.

I deliberately left that name so we can have both; for instance, I commonly work with processor architectures where rust 1.39 is a no-go but futures are perfectly fine, and as such, would benefit from having the option to have either. That's why I laid it out the way I did. After all, I'm also pretty sure I am not the only one in this case.

I will add a generation code and some tests to cover everything. I wasn't sure what I had to do next - now I know :-)

I was not aware that openapi-generator could generate multipart MIME bindings.
Implementing them was complicated further by `reqwest::async::multipart::Form` having
an entirely different API than the `sync` version of it, leading to two decisions:
1. The file is read in its entirety. This is the same behavior as on the sync version;
if time allows, I will convert this into a chunked stream
2. The entire mime detection logic is taken from the `sync` version and added as a
private function in the module
@srenauld

Copy link
Copy Markdown
Author

Hey @bcourtine,

I added a full client sample, which also revealed a feature I was not aware of - MIME file uploads. That's also done now.

Throughout this time I've struggled with some teething CI problems, including:

  • timeouts on drone
  • issues on travis such as the following: Could not transfer artifact org.openapitools:openapi-generator-maven-plugin:pom:4.1.3-SNAPSHOT from/to sonatype-snapshots (https://oss.sonatype.org/content/repositories/snapshots/): Failed to transfer file https://oss.sonatype.org/content/repositories/snapshots/org/openapitools/openapi-generator-maven-plugin/4.1.3-SNAPSHOT/openapi-generator-maven-plugin-4.1.3-SNAPSHOT.pom with status code 502
  • An unknown issue regarding the R generator on circleCI

Is there any chance you could have a quick look and tell me if there's something obvious that I am missing and/or re-run the CI to see if the travis error was just intermittent? Would be greatly appreciated :-)

@ctaggart

Copy link
Copy Markdown

It looks to me like this pull request address #3865, but should probably be closed in favor of #4210 which will update to reqwest 0.10 once that ships.

@srenauld

Copy link
Copy Markdown
Author

@ctaggart As explained in the initial PR comment, I'd personally be in favor of keeping both (as in, pre-1.39 futures-based, and post-1.39 async/await), even if the futures-based implementation is on life support.

Let me give you an example. In the past three years I've built, developed and released a few products running on a processor from ARM that you literally cannot use anything beyond the nightly from november 30th 2018 with. The reason being that a breaking change between 1.32 and 1.33 happened - I never properly dug down why, but I know it is related to atomic operation emulation (something which this specific processor needs).

For that reason, even though the async/await version is "newer", it is also inaccessible to those clients, even though old-school futures themselves are, as is a lot of the Rust ecosystem. And for that reason, for such requirements where one cannot use the mainline, greenest possible compiler, I would personally be in favor of doing both.

@wing328

Copy link
Copy Markdown
Member

@srenauld I've added an option to support async operations in the Rust reqwest client.

I wonder if you can pull the latest master to give it a try.

@wing328

Copy link
Copy Markdown
Member

Closing as there's no update.

@wing328wing328 closed this Jan 25, 2021
Sign up for freeto 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.

4 participants

@srenauld@bcourtine@ctaggart@wing328