Comments (4)
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.
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.
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.
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)
- Dockerfile CI fails, outdated rust compiler HOT 5
- CI: test docker build before deploying
- Allow adjusting domain / server_url without running --initialize
- Auto tag docker images with versions, not just latest
- Remove `tpf` from `atomic-cli`
- URLs in search queries for filtering broken HOT 1
- Order dependence in imports - Class and Property definitions need to be defined first HOT 2
- Rebuild index async on boot
- build_index run twice on atomic-server boot
- Dockerfile broken `exec /atomic-server-bin: no such file or directory` HOT 1
- musl build for cross-platform docker images HOT 4
- Advanced CMS features tracking issue
- Refactor `for_agent` / clear up API usage HOT 1
- Check for unused dependencies in ci
- Importer should error if multiple resources with the same Local-id are imported
- Plugin parameters - as Properties instead of urls?
- Outreach / messaging / community engagement features tracking issue
- Rebrand repo to atomic-server
- Update swagger / openapi spec
- Bearer token support HOT 1
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 atomic-server.