···57575858---
59596060+# "Parse, don't validate" considered harmful
6161+6262+If serde_json can't parse something as the type you're asking of it,
6363+6464+it will give you nothing except an error.
6565+6666+---
6767+6868+# "Parse, don't validate" considered harmful
6969+7070+Jacquard has its `Data<S>` type to handle some classes of this,
7171+7272+to work with freeform data in useful ways,
7373+7474+but it doesn't handle the scenario where you have something that almost
7575+7676+but not quite fits a lexicon.
7777+7878+---
7979+8080+# Smart constraints
8181+8282+## The wonderful 'handle.invalid'
8383+8484+- Handles are common!
8585+- You need to process lots of them
8686+- If you choke at the deserialization stage bc one post in a list has an author who's handle is invalid, that's not good as a user experience.
8787+8888+---
8989+9090+# Smart constraints
9191+9292+- Also a bad developer experience.
9393+- All of a sudden you can't take advantage of all the nice types!
9494+- `serde_json::Value` or `ipld_core::Ipld` offers literally nothing useful beyond "this thing is valid JSON/CBOR".
9595+9696+---
9797+9898+# Smart constraints
9999+100100+`Data<S>` is **less useless** but still sucks donkey balls when you wanted your type.
101101+102102+
103103+104104+---
105105+106106+# Smart constraints
107107+108108+And that is why jacquard's handle constructor has a specific carveout for "handle.invalid"
109109+110110+Because there's a time to follow the spec
111111+112112+And there's a time to refrain
113113+114114+---
115115+116116+## Jacquard
117117+118118+- Typestates that work for you
119119+- As pluggable as possible
120120+- Good defaults
121121+- Generated code you can just use, that's readable, easy to work with
122122+123123+---
124124+60125## What you're seeing
6112662127- Each dot is a Jetstream event
···6913470135# But...
71136137137+- We can change that!
7213873139---
7414075141## HOW?
7614277143- Standing upon the shoulders of giants here
7878-- Big party trick is the **subsecond** library
7979-- Bevy engine with hot patch support
8080-144144+- **subsecond** library
145145+- Bevy engine with hot-patching
146146+- Jacquard beta that makes lifetimes optional
8114782148---
83149