Comments (5)
Welcome to the project, and thanks for filing the issue. My first instinct is to try and avoid adding new APIs for a use case that isn't too onerous to solve in some other way. For this use case, does pipe
do what you need to be able to work with the current send
method? https://docs.rs/pipe/0.3.0/pipe/
Also, are there other crates that provide output via a Write
rather than a Read
and that people are likely to want to use as a request body?
from ureq.
Thank you for your fast feedback and for giving me the push I needed to actually try pipe
, I had written pipe
off as I did not want to deal with the hasle of synconising mutiple threads as that was precicsely the kind of thing I was trying to avoid by using ureq instead of a full blown async client.
Using pipe
is less ugy than I thought it would be, but getting good error reporting out of it is a pain as the errors are reported out of order and on a different thread, e.g. a typo in the host name turns up on the write thread as pipe reader has been dropped
rather than the helpful Dns Failed
message that could have been returned to the user before writing even started.
There are loads of crates that provide output via Write
and not Read
e.g. some more examples zstd compression, JPEG encoding, CSV and many other interesting file formats. Many formats are just nicer to code to a Write
interface than Read
as read forces you to explicitly keep track framing in a resumeable manor instead of just writing it.
They may not be needed for the classic REST use cases but they are realy useful when trying to upload the result of some process to a server, especially if the result is too big to fit in memory. e.g. adding a screenshot to a Jira ticket, a process to extract a report from an DB and upload it to S3, or my case of uploading log files from an IoT device.
I very much apreciate the goal of keeping ureq simple but thought that this may be something that other people might find useful.
from ureq.
We recommend pipe for this use case. https://crates.io/crates/pipe
Re-open a new issue if there are more issues with that.
from ureq.
I'm happy to leave this as closed, thank you for all your hard work on this crate.
Doing it via pipe works but requires some extra complications to get the error handling to be useable.
Here is an expample of the ~90 lines of code needed to get the errors back to the writing thread, in case anyone else is interested.
from ureq.
Very interesting! That's a lot more code than I thought would be needed.
from ureq.
Related Issues (20)
- Set local address to bind a specific interface HOT 2
- [Bug] In some case return empty "Content-Length" response header HOT 3
- Timeout not working when having packet losses HOT 1
- Support Multipart Forms HOT 1
- Timeout not always respected HOT 5
- Invalid transformation to http::Response<Vec<u8>> for non utf8 response bodies HOT 3
- Example of requesting a continuous stream HOT 1
- Timeout not taking in consideration TimeoutConnect HOT 2
- ureq 2.9.3 fails to compile with errors in `hoot` HOT 3
- `ureq` 2.9.3 compilation fails due to `hoot` requiring rustc 1.65 HOT 4
- Keep-alive is disabled when using SOCKS HOT 1
- Update requirement of `url=2.3.1` HOT 3
- hootbin is a required dependency HOT 2
- Stream panics in drop during test
- Redirect history not available HOT 2
- Add support for configuring default headers in AgentBuilder HOT 1
- Potential to modify ordering for IS_TEST in lib module HOT 1
- Change `send_json` `data` argument HOT 4
- Add `Error::as_response` HOT 3
- Middleware cannot modify query string parameters? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ureq.