Git Product home page Git Product logo

Comments (5)

jsha avatar jsha commented on July 24, 2024

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.

aj-bagwell avatar aj-bagwell commented on July 24, 2024

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.

algesten avatar algesten commented on July 24, 2024

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.

aj-bagwell avatar aj-bagwell commented on July 24, 2024

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.

algesten avatar algesten commented on July 24, 2024

Very interesting! That's a lot more code than I thought would be needed.

from ureq.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.