Giter Site home page Giter Site logo

Comments (4)

joepio avatar joepio commented on June 23, 2024

Perhaps it makes sense to start with the atomic_lib::Resource API - which does not support nested resources yet.

I think something like this makes sense:

let resource = Resource::new();
let nested_resource  = resource.new_nested("https://example.com/someProp");
nested_resource.set_prop_shortname("description", "me is nested");

With this API, the nested_resource needs some reference to the store, just like the Resource does (otherwise, changing props would not do anything).

A different approach, where we set a nested resource as a value:

let resource = Resource::new();
let nested_resource  = resource.new_nested();
nested_resource.set_prop_shortname("description", "me is nested");
resource.set("https://example.com/someProp", nested_resource);

Now, let's consider a case where theres a 1-N relationship, instead of a 1-1. Perhaps we've got a Blog with some posts.
How should we append a blogpost to our blog, assuming it's a nested resource?

let blog = Resource::new();
let post  = blog.new_nested();
post.set_prop_shortname("text", "I'm a blogpost!");
blog.set_prop_shortname("posts", Vec::from(blog.get("posts")).push(post));

Yuck... Perhaps we need some functions to deal with array (of nested resources):

let blog = Resource::new();
let post  = blog.new_nested();
let postslist = blog.get_as_vec("posts");
postslist.push(post);
// Maybe we won't need this following one, if the get_as_vec is awayre
let blog.post = postslist;

from atomic-server.

joepio avatar joepio commented on June 23, 2024

For now, I think I'm going to try storing Values instead of Strings in the store. This means refactoring quite a bit of code.

from atomic-server.

joepio avatar joepio commented on June 23, 2024

Currently, nested resources (at least in the Commit.rs impl) are serialized using Hashmap's auto conversion... Not nice.

This needs more thought. I think the AtomicURL datatype should be removed, and should be replaced by a Resource datatype, which can be either a URL or a Nested Resource.

The Nested Resource should be serialized as a JSON object in JSON, and perhaps in some other way in AD3.

from atomic-server.

joepio avatar joepio commented on June 23, 2024

Should I allow both Nested and URL resources in an array?

/// An individual Value in an Atom, represented as a native Rust enum.
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum Value {
    AtomicUrl(String),
    Date(String),
    Integer(isize),
    Markdown(String),
    ResourceArray(Vec<ResourceValue>),
    Slug(String),
    String(String),
    /// Unix Epoch datetime in milliseconds
    Timestamp(i64),
    NestedResource(PropVals),
    Boolean(bool),
    Unsupported(UnsupportedValue),
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum ResourceValue {
    NestedResource(PropVals),
    AtomicUrl(String),
}

from atomic-server.

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.