GithubHelp home page GithubHelp logo

Comments (7)

thehabbos007 avatar thehabbos007 commented on September 25, 2024 1

If you wanted to try to help hack on it, I think maybe the best way to solve it is to refactor the current mark_observed and mark_unobserved functions into a kind of Observer object

I'll try to play around with this idea. Would be a nice learning experience for myself as well :)

from anchors.

lord avatar lord commented on September 25, 2024 1

I think you can actually do this already without any changes to Anchors, although perhaps it can be made more ergonomic? Just added this as example/update_callback.rs:

use anchors::expert::{AnchorExt, Var};
use anchors::singlethread::*;
use std::cell::RefCell;

fn main() {
    let mut engine = Engine::new();
    let (cat_count, set_cat_count) = Var::new(1);
    let (dog_count, set_dog_count) = Var::new(1);
    let (fish_count, set_fish_count) = Var::new(1);
    let total_mammals = (&cat_count, &dog_count).map(|cats, dogs| cats + dogs);
    let total_animals = (&total_mammals, &fish_count).map(|mammals, fish| mammals + fish);
    let mammal_callback = total_mammals.map(|total_mammals| println!("mammals updated: {:?}", total_mammals));
    let animal_callback = total_animals.map(|total_animals| println!("animals updated: {:?}", total_animals));
    engine.mark_observed(&mammal_callback);
    engine.mark_observed(&animal_callback);

    println!("stabilizing...");
    engine.stabilize();

    set_cat_count.set(2);
    set_dog_count.set(2);
    println!("stabilizing...");
    engine.stabilize();

    set_fish_count.set(2);
    println!("stabilizing...");
    engine.stabilize();
}

from anchors.

lord avatar lord commented on September 25, 2024

Hey, sorry, just saw this! Would definitely be a great feature to add, thanks for the suggestion! I'll try to get to it in a couple days.

from anchors.

thehabbos007 avatar thehabbos007 commented on September 25, 2024

It's all good! I was interested in helping out too, but I don't know if i understand the architecture well enough :)

Thank you a lot!

from anchors.

lord avatar lord commented on September 25, 2024

If you wanted to try to help hack on it, I think maybe the best way to solve it is to refactor the current mark_observed and mark_unobserved functions into a kind of Observer object, and maybe allow subscribing to changes on that object? Kind of a vague suggestion, sorry.

Glad somebody out there is actually using this library, and sorry for the poor documentation!

from anchors.

thehabbos007 avatar thehabbos007 commented on September 25, 2024

Ah, I see, of course using map would be a way to accomplish this.
What I had played around with was adding a callback function to the var new method and called it new_observed having that take in a callback closure which was added onto the returned Var. I'd then call down to that callback in poll_updated. Although it does work, it required a lot of finicky type declarations to make the compiler happy, not really a solution I liked.

This is more sensible :)

from anchors.

lord avatar lord commented on September 25, 2024

Ah, nice! Glad this works for you, and thanks again for submitting this feedback.

Will close this issue, but if you have other ideas for improvements, would love to hear them! Feel free to open as many issues as you'd like.

from anchors.

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.