y-crdt / ydotnet

.NET bindings for yrs.
MIT License
35 stars 9 forks source link

Create the Doc bindings #3

Closed LSViana closed 1 year ago

LSViana commented 1 year ago

Implement the bindings for the Doc struct based on the exposed bindings.

For each bound method, the implementation and unit tests must be written.

LSViana commented 1 year ago

Hi, @Horusiath!

I'd like you to take a look at the work I'm doing to create the .NET bindings for Yrs.

The "core" of the work has been happening mostly on the Doc and DocChannel classes. They're the public and the native binding classes, respectively.

Everything else around them are tests or helper definitions to interact with the FFI exposed by YFFI. I've been moving slow because I can only work on this in my spare time (and this is not my only side project), but there's been steady progress here.

What do you think?

LSViana commented 1 year ago

Also, I'd like to ask you about the Guid() method exposed by YFFI as ydoc_guid.

I noticed that, sometimes, the UUID v4 generated contains some internal values like 11 (decimal) that are translated to 0B. Then, when they're formatted to string, it becomes B (or b) instead of 0B and the final string doesn't match the GUID format that C# expects (it's like characters are missing). Is that fixable somehow? I'd not like to touch (or request changes to) the Yrs code, then if you have a less invasive suggestion, that'd be nice.

Horusiath commented 1 year ago

I noticed that, sometimes, the UUID v4 generated contains some internal values like 11 (decimal) that are translated to 0B. Then, when they're formatted to string, it becomes B (or b) instead of 0B and the final string doesn't match the GUID format that C# expects (it's like characters are missing). Is that fixable somehow? I'd not like to touch (or request changes to) the Yrs code, then if you have a less invasive suggestion, that'd be nice.

I think it should be doable. However keep in mind that the source of that uuid is originally in JavaScript, so it's possible that someone is using arbitrary strings in there - which is also a reason why I went with string representation in Rust.