freenet-core icon indicating copy to clipboard operation
freenet-core copied to clipboard

create a hight level api for freenet-core

Open gogo2464 opened this issue 1 year ago • 7 comments

it is currently complicated to do GET/UPDATE/SUBSCRIBE requests in freenet library.

For example, fdev had to reimplement everything https://github.com/freenet/freenet-core/blob/main/crates/fdev/src/main.rs#L58

I suggest to exposed a struct to do:

  • request.get
  • request.update
  • request.subscribe
  • etc...

I could put it in the lib.rs file https://github.com/freenet/freenet-stdlib/blob/main/rust/src/lib.rs

gogo2464 avatar Apr 06 '24 15:04 gogo2464

I think it belongs in the client_api module, perhaps for now in a client_api.simple module.

So something like:

let api = client_api.simple.API::new(ws_port);
let contract_state : Vec<u8> = api.get(contract_address).await;

Would appreciate @iduartgomez's input also.

sanity avatar Apr 06 '24 21:04 sanity

I started to implement it.

I love the concept of exposing minimal api. The issue is it sounds a windows driver wrapper philosophy. We should expose only the required and let everything else in private.

We may let folders as

  • internal
    • everything
  • external
    • API
      • update
      • get

gogo2464 avatar Apr 07 '24 01:04 gogo2464

I suggest for a final version to do:

  • freenet
    • everything
    • lib.rs
    • API
      • update
      • get

At this moment we may merge my current pr. Ready for a review.

gogo2464 avatar Apr 11 '24 19:04 gogo2464

already usable with:

use freenet::client_api::simple::API;

#[tokio::main]
async fn main() -> Result<(), anyhow::Error> {
    let mut api = API::new(50509);
    let out = api.update(String::from("lftMopswnMBotiZflwjYvuGCWbsileTEruGllHmLnOAWp"), vec![1, 2, 3]).await;
}

the value of out should be Ok().

gogo2464 avatar Apr 11 '24 20:04 gogo2464

I created a draft pr to discuss of the template https://github.com/freenet/freenet-core/pull/1032 could you check it out and tell me what to improove or not?

gogo2464 avatar Jun 09 '24 10:06 gogo2464

Another idea could be to simply expose the fdev commands as a public crate.

gogo2464 avatar Jun 09 '24 10:06 gogo2464

@sanity I suggest to expose fdev commands instead of https://github.com/freenet/freenet-core/pull/1032. Can I do it please?

gogo2464 avatar Jun 18 '24 13:06 gogo2464