{"type":"rich","version":"1.0","title":"Rusty Russell wrote","author_name":"Rusty Russell (npub179…elz4s)","author_url":"https://yabu.me/npub179e9tp4yqtqx4myp35283fz64gxuzmr6n3yxnktux5pnd5t03eps0elz4s","provider_name":"njump","provider_url":"https://yabu.me","html":"Since I'm taking a few weeks vacation, I've decided to seriously try to learn rust. My method in this case is to ask ChatGPT to guide me (but not write for me!) a library (\"crate\") that I've always wanted to write and never got around to. \n\nOf course, I get a lot of feedback on appropriate rust styling, but some of it veers into things I feel are deeper constraints. In this case, I had an open function, which took a struct containing some flags, such as \"writeable\", \"create if didn't exist\".\n\nIt didn't like the fact that I asserted if you set create and didn't set writeable. Here is my response: \n\n---\n\nRe: assert!().  I dislike APIs which allow misuse.  Callers of a library should not rely on such checks in the library, in fact the concept of adding an InvalidOptions error type is offensive.  A recoverable error is strictly a worse api than an unignorable error.  But a compile time error is better.\n\nWe should use an enum READONLY, WRITE_MUST_EXIST, WRITE_MAY_CREATE.\n\n---\n\nOf course, it's a waste of time for me to lecture it on style, but I can't help myself!! "}
