Code Monkey home page Code Monkey logo

stac-rs's People

Contributors

dependabot[bot] avatar gadomski avatar philvarner avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

stac-rs's Issues

Add validation

This is distinct from #27. A validator that directly translates the specification into code checks would be valuable for multiple reasons:

  • better error messages than most jsonschema validators
  • ability to handle complex cases that can't be expressed in jsonschema
  • better support for multiple errors (rather than bailing on the first validation error)
  • warnings and suggestions

Add asynchronous jsonschema validation

The current jsonschema validator uses blocking reqwests under the hood to get network schemas. We should re-implement the schema fetcher using async in stac-async.

adding jsonschema feature gives error

Adding the jsonschema option per the docs:

stac = { version = "0.1", features = ["jsonschema"]}

and building gives the error:

the package `foobar` depends on `stac`, with features: `jsonschema` but `stac` does not have these features.

Use composable renderers for non-structural links and assets

There's a lot of things you might want to do with links and assets when you're rendering a Stac. Sometimes you might want to move the assets alongside the objects. Sometimes you want to re-create the links so they still work relatively. And sometimes you want to reject because the render is going to a different href base and the relative asset hrefs won't be valid.

One way to approach this is composable renderers, e.g.:

let renderer = LinkRebuilder::new(BestPractices::new("root"));
for result in renderer.render(..) {
    // etc
}

It kind of works like BufReader and friends. The LinkRebuilder (and AssetMover, and whatever) would first render the object itself, and then make any modifications necessary to the object before returning.

Add async feature

I think, for the basic read operations, we could add an optional async feature that exposes async versions of the functions that already exist. That could be a useful building block for downstreams.

Links trait

A trait to be implemented by all structures and enums that have links. This provides a common links interface between Object and the three types of objects.

Feature architecture

There's several enhancements that could stand as their own crates, or be included in the main stac crate w/ features. These include:

And maybe others. I'm undecided on how to implement. My instinct right now is to workspace everything, e.g.:

[workspace]
members = [
    "core",   # crate: stac
    "cli",    # crate: stac-cli
    "async",  # crate: stac-async
    "client", # crate: stac-client
]

This will make development easier during the early phases when they're likely to change together quite a bit. We could split them off later into their own repos w/o too much impact.

The downside here is that its just complex, and there may be things we'd want to include in core, e.g. async. I'll mull on this more.

Add tree management

We removed tree management (aka children, parents, roots, etc) in v0.0.5. It'd be nice to have it back, but I need to think through the strategy a bit more to make it less confusing.

Bad error message in validation

When validating a Collection with a list in the temporal extents attribute (instead of an object), the error message was ERROR: data did not match any variant of untagged enum Value. We should provide more information than that.

Collection download doesn't work

The following command doesn't download any assets:

stac download https://planetarycomputer-staging.microsoft.com/api/stac/v1/collections/io-lulc-9-class .

Create `Walk` trait

We can probably do some useful stuff with a Walk trait that is implemented by Handles, Objects and Items:

  • breadth_first() and depth_first() builder-pattern methods to switch tree traversal order
  • start_at() and start_at_object() (not sure about the names) builder-pattern methods to search the tree for a handle/object, then start walking from there.

Additionally we can add these to Objects and Items:

  • take_objects() and clone_objects() builder-pattern methods that switch between taking the objects out of the visited nodes, and cloning them (default take)

Add benchmarks

One of the selling points of using this library will be (hopefully) performance. Having benchmarks would allow us to quantify that performance.

Increase coverage

There's a decent number of branches that aren't checked by CI. We should increase coverage.

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.