All Versions
22
Latest Version
Avg Release Cycle
32 days
Latest Release
1675 days ago

Changelog History
Page 2

  • v0.6.0 Changes

    January 30, 2020

    ๐Ÿ“š API Documentation

    This patch introduces a new cookies API, based on the excellent ๐Ÿ“„ cookie crate. Working with cookies is a staple for ๐ŸŒ any web server, and Tide's new API now makes this entirely declarative.

    โž• Additionally we've added back CORS support. This makes it possible for ๐Ÿ”ง possible to configure the single-origin policy of browsers, which is an incredibly valuable resource.

    ๐Ÿ— And finally nesting services with Tide has become even easier. Building on the APIs in 0.5.0, the manual song-and-dance required to nest APIs is no longer required, and services can now be nested as-is through the Route::nest API.

    Examples

    Cookies
    use cookie::Cookie;
    use tide::Response;
    
    let mut app = tide::new();
    
    app.at("/").get(|req| async move {
        println!("cat snack: {:?}", req.cookie("snack"));
        Response::new(200)
    });
    app.at("/set").get(|req| async move {
        let mut res = Response::new(200);
        res.set_cookie(Cookie::new("snack", "tuna"));
        res
    });
    app.listen("127.0.0.1:8080").await?;
    
    CORS

    ๐ŸŒ Make GET, POST, and OPTIONS endpoints on this server accessible from any web page.

    use http::header::HeaderValue;
    use tide::middleware::{Cors, Origin};
    
    let rules = Cors::new()
        .allow_methods(HeaderValue::from_static("GET, POST, OPTIONS"))
        .allow_origin(Origin::from("*"))
        .allow_credentials(false);
    
    let mut app = tide::new();
    app.middleware(rules);
    app.at("/").post(|_| async { Response::new(200) });
    app.listen("localhost:8080").await?;
    
    Nesting

    Nest the inner serve inside the outer service, exposing GET /cat/nori.

    let mut inner = tide::new();
    inner.at("/nori").get(|_| async { Response::new(200) });
    
    let mut outer = tide::new();
    outer.at("/cat").nest(inner);
    
    outer.listen("localhost:8080").await?;
    

    โž• Added

    • โž• Added Route::all to match all HTTP methods on a route (#379)
    • โž• Added Route::nest to nest instances of tide::Server on sub-routes (#379)
    • โž• Added a new cors submodule containing CORS control middleware (#373)
    • โž• Added Request::cookie to get a cookie sent by the client (#380)
    • โž• Added Response::set_cookie to instruct the client to set a cookie (#380)
    • โž• Added Response::remove_cookie to instruct the client to unset a cookie (#380)

    ๐Ÿ”„ Changed

    • ๐Ÿ”„ Changed the behavior of optional params in Request.query to be more intuitive (384)
    • ๐Ÿ‘Œ Improved the debugging experience of query deserialization errors (384)
    • โšก๏ธ Updated the GraphQL example to use the latest version of Juniper (#372)
    • ๐Ÿ–จ Tide no longer prints to stdout when started (387)

    ๐Ÿ›  Fixed

    • ๐Ÿ›  Fixed an incorrect MIME type definition on Response::body (378)
  • v0.5.1 Changes

    December 20, 2019

    ๐Ÿ“š API Documentation

    ๐Ÿ›  This fixes a rendering issue on docs.rs.

    ๐Ÿ›  Fixes

    • ๐Ÿ›  Fix a rendering issue on docs.rs (#376)
  • v0.5.0 Changes

    December 20, 2019

    ๐Ÿ“š API Documentation

    ๐Ÿš€ This release introduces the ability to nest applications, add logging
    ๐Ÿ“š middleware, and improves our documentation.

    Nesting applications is a useful technique that can be used to create several
    sub-applications. This allows creating clear points of isolation in applications
    that can be used completely independently of the main application. But can be
    recombined into a single binary if required.

    Being able to nest applications is also a necessary first step to re-introduce
    per-route middleware, which we'll do in subsequent patches.

    Examples

    let mut inner = tide::new(); inner.at("/").get(|\_| async { "root" }); inner.at("/foo").get(|\_| async { "foo" }); inner.at("/bar").get(|\_| async { "bar" });let mut outer = tide::new(); outer .at("/nested") .strip\_prefix() // catch /nested and /nested/\* .get(inner.into\_http\_service()); // the prefix /nested will be stripped here
    

    โž• Added

    • โž• Added Route::strip_prefix (#364)
    • โž• Added the ability Services to be nested (#364)
    • โž• Added middleware::RequestLogger (#367)

    ๐Ÿ”„ Changed

    • ๐Ÿ“š Updated and improved the documentation (#363)
  • v0.4.0 Changes

    November 26, 2019

    ๐Ÿš€ This release is a further polishing of Tide's APIs, and works towards
    significantly improving Tide's user experience. The biggest question left
    unanswered after this patch is how we want to do error handling, but aside from
    that the end-user API should be pretty close to where we want it to be.

    The biggest changes in this patch is endpoints now take Request instead of
    Context. The new Request and Response types are no longer type aliases but
    concrete types, making them substantially easier to use. This also means that
    we've been able to fold in all the Ext methods we were exposing, enabling
    methods such as let values: Schema = req.body_json()?; to deserialize an
    incoming JSON body through a Serde schema. This should make it significantly
    easier to write APIs with Tide out of the box.

    Example

    Create a "hello world" app:

    #[async\_std::main]async fn main() -\> Result\<(), std::io::Error\> { let mut app = tide::new(); app.at("/").get(|\_| async move { "Hello, world!" }); app.listen("127.0.0.1:8080").await?; Ok(()) }
    

    Redirect from /nori to /chashu:

    #[async\_std::main]async fn main() -\> Result\<(), std::io::Error\> { let mut app = tide::new(); app.at("/chashu").get(|\_| async move { "meow" }); app.at("/nori").get(tide::redirect("/chashu")); app.listen("127.0.0.1:8080").await?; Ok(()) }
    

    โž• Added

    • โž• Added logger::RequestLogger based on log (replaces logger:RootLogger).
    • โž• Added Request with inherent methods (replaces Context).
    • โž• Added Server (replaces App).
    • โž• Added Response (replacing a type alias of the same name).
    • โž• Added a prelude submodule, holding all public traits.
    • โž• Added a new free function, a shorthand for Server::new.
    • ๐Ÿ†“ Added a with_state free function, a shorthand for Server::with_state.
    • โž• Added Result type alias (replaces EndpointResult).
    • โž• Added a redirect free function to redirect from one endpoint to another.

    ๐Ÿ”„ Changed

    • โ†ช Resolved an #[allow(unused_mut)] workaround.
    • ๐Ÿ“‡ Renamed ExtractForms to ContextExt.
    • Response is now a newly defined type.

    โœ‚ Removed

    • โœ‚ Removed logger::RootLogger (replaced by logger:RequestLogger).
    • โœ‚ Removed internal use of the box_async macro.
    • โœ‚ Removed Context (replaced by Request).
    • โœ‚ Removed the Response type alias (replaced by a new Response struct).
    • โœ‚ Removed App (replaced by Server).
    • Temporarily disabled the multipart family of APIs, improving compilation
      speed by ~30%.
    • โœ‚ Removed EndpointResult (replaced by Result).
  • v0.3.0 Changes

    October 31, 2019

    ๐Ÿš€ This is the first release in almost 6 months; introducing a snapshot of where we ๐Ÿš€ were right before splitting up the crate. This release is mostly similar to 0.2.0, but sets us up to start rewinding prior work on top.

    โž• Added

    • โž• Added "unstable" feature flag.
    • โž• Added example for serving static files.
    • โž• Added keywords and categories to Cargo.toml.
    • 0๏ธโƒฃ Implemented Default for App.
    • โž• Added App::with_state constructor method.
    • โž• Added Context::state (replacing Request::app_data)
    • โž• Added examples to the documentation root.
    • โž• Added a section about stability guarantees to the documentation root.

    ๐Ÿ”„ Changed

    • ๐Ÿ›  Fixed multipart uploads.
    • ๐Ÿ›  Fixed some doc tests.
    • ๐Ÿ“‡ Rename cookies::CookiesExt to cookies::ContextExt.
    • ๐Ÿ“‡ Rename querystring::ExtractQuery to querystring::ContextExt.
    • ๐Ÿ‘ท Switched CI provider from Travis to GitHub actions.
    • โšก๏ธ Updated README.
    • โšก๏ธ Updated all dependencies.
    • Replaced AppData with State.

    โœ‚ Removed

    • โœ‚ Removed the RFCs subdirectory.
    • โœ‚ Removed an extra incoming license requirement.
    • โœ‚ Removed outdated version logs.
    • โœ‚ Removed rustfmt.toml.
    • โœ‚ Removed Request::app_data (replaced with Context::state).
  • v0.2.0 Changes

    May 03, 2019

    ๐ŸŒฒ Log not kept.

  • v0.1.1 Changes

    April 18, 2019

    ๐ŸŒฒ Log not kept.

  • v0.1.0 Changes

    April 15, 2019

    ๐ŸŒฒ Log not kept.

  • v0.0.5 Changes

    February 26, 2019

    ๐ŸŒฒ Log not kept.

  • v0.0.4 Changes

    February 04, 2019

    ๐ŸŒฒ Log not kept.