+194
-170
Cargo.lock
+194
-170
Cargo.lock
···
4
5
[[package]]
6
name = "ahash"
7
-
version = "0.8.11"
8
source = "registry+https://github.com/rust-lang/crates.io-index"
9
-
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
10
dependencies = [
11
"cfg-if",
12
"once_cell",
···
14
"zerocopy",
15
]
16
17
-
[[package]]
18
-
name = "android-tzdata"
19
-
version = "0.1.1"
20
-
source = "registry+https://github.com/rust-lang/crates.io-index"
21
-
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
22
-
23
[[package]]
24
name = "android_system_properties"
25
version = "0.1.5"
···
31
32
[[package]]
33
name = "anyhow"
34
-
version = "1.0.94"
35
source = "registry+https://github.com/rust-lang/crates.io-index"
36
-
checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7"
37
38
[[package]]
39
name = "anymap"
···
43
44
[[package]]
45
name = "autocfg"
46
-
version = "1.4.0"
47
source = "registry+https://github.com/rust-lang/crates.io-index"
48
-
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
49
50
[[package]]
51
name = "bitflags"
52
-
version = "2.6.0"
53
source = "registry+https://github.com/rust-lang/crates.io-index"
54
-
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
55
56
[[package]]
57
name = "bumpalo"
58
-
version = "3.16.0"
59
source = "registry+https://github.com/rust-lang/crates.io-index"
60
-
checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
61
62
[[package]]
63
name = "cc"
64
-
version = "1.2.2"
65
source = "registry+https://github.com/rust-lang/crates.io-index"
66
-
checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc"
67
dependencies = [
68
"shlex",
69
]
70
71
[[package]]
72
name = "cfg-if"
73
-
version = "1.0.0"
74
source = "registry+https://github.com/rust-lang/crates.io-index"
75
-
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
76
77
[[package]]
78
name = "chrono"
79
-
version = "0.4.38"
80
source = "registry+https://github.com/rust-lang/crates.io-index"
81
-
checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
82
dependencies = [
83
-
"android-tzdata",
84
"iana-time-zone",
85
"js-sys",
86
"num-traits",
87
"serde",
88
"wasm-bindgen",
89
-
"windows-targets",
90
]
91
92
[[package]]
···
97
98
[[package]]
99
name = "darling"
100
-
version = "0.20.10"
101
source = "registry+https://github.com/rust-lang/crates.io-index"
102
-
checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
103
dependencies = [
104
"darling_core",
105
"darling_macro",
···
107
108
[[package]]
109
name = "darling_core"
110
-
version = "0.20.10"
111
source = "registry+https://github.com/rust-lang/crates.io-index"
112
-
checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
113
dependencies = [
114
"fnv",
115
"ident_case",
···
120
121
[[package]]
122
name = "darling_macro"
123
-
version = "0.20.10"
124
source = "registry+https://github.com/rust-lang/crates.io-index"
125
-
checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
126
dependencies = [
127
"darling_core",
128
"quote",
···
144
"sea-query",
145
"serde",
146
"serde_json",
147
-
"thiserror 2.0.4",
148
"tracing",
149
"tracing-subscriber",
150
]
···
160
161
[[package]]
162
name = "eloquent"
163
-
version = "2.0.3"
164
source = "registry+https://github.com/rust-lang/crates.io-index"
165
-
checksum = "517c3a122847f4da19d35f4bdbc40a712f1640b535a59c0559e2dbf3a39847f3"
166
dependencies = [
167
"eloquent_core",
168
]
169
170
[[package]]
171
name = "eloquent_core"
172
-
version = "2.0.2"
173
source = "registry+https://github.com/rust-lang/crates.io-index"
174
-
checksum = "5a4ed861817efa9c37276a12abf36194a9737f54ab86ceaac973ee0bfb901ede"
175
dependencies = [
176
"log",
177
"sqlformat",
···
189
source = "registry+https://github.com/rust-lang/crates.io-index"
190
checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
191
192
[[package]]
193
name = "fnv"
194
version = "1.0.7"
···
227
228
[[package]]
229
name = "iana-time-zone"
230
-
version = "0.1.61"
231
source = "registry+https://github.com/rust-lang/crates.io-index"
232
-
checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
233
dependencies = [
234
"android_system_properties",
235
"core-foundation-sys",
236
"iana-time-zone-haiku",
237
"js-sys",
238
"wasm-bindgen",
239
"windows-core",
240
]
···
256
257
[[package]]
258
name = "inherent"
259
-
version = "1.0.11"
260
source = "registry+https://github.com/rust-lang/crates.io-index"
261
-
checksum = "0122b7114117e64a63ac49f752a5ca4624d534c7b1c7de796ac196381cd2d947"
262
dependencies = [
263
"proc-macro2",
264
"quote",
···
267
268
[[package]]
269
name = "itoa"
270
-
version = "1.0.14"
271
source = "registry+https://github.com/rust-lang/crates.io-index"
272
-
checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674"
273
274
[[package]]
275
name = "js-sys"
276
-
version = "0.3.74"
277
source = "registry+https://github.com/rust-lang/crates.io-index"
278
-
checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705"
279
dependencies = [
280
"once_cell",
281
"wasm-bindgen",
···
289
290
[[package]]
291
name = "libc"
292
-
version = "0.2.167"
293
source = "registry+https://github.com/rust-lang/crates.io-index"
294
-
checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc"
295
296
[[package]]
297
name = "libsqlite3-sys"
···
305
306
[[package]]
307
name = "log"
308
-
version = "0.4.22"
309
source = "registry+https://github.com/rust-lang/crates.io-index"
310
-
checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
311
312
[[package]]
313
name = "memchr"
314
-
version = "2.7.4"
315
-
source = "registry+https://github.com/rust-lang/crates.io-index"
316
-
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
317
-
318
-
[[package]]
319
-
name = "minimal-lexical"
320
-
version = "0.2.1"
321
-
source = "registry+https://github.com/rust-lang/crates.io-index"
322
-
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
323
-
324
-
[[package]]
325
-
name = "nom"
326
-
version = "7.1.3"
327
source = "registry+https://github.com/rust-lang/crates.io-index"
328
-
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
329
-
dependencies = [
330
-
"memchr",
331
-
"minimal-lexical",
332
-
]
333
334
[[package]]
335
name = "nu-ansi-term"
336
-
version = "0.46.0"
337
source = "registry+https://github.com/rust-lang/crates.io-index"
338
-
checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
339
dependencies = [
340
-
"overload",
341
-
"winapi",
342
]
343
344
[[package]]
···
352
353
[[package]]
354
name = "once_cell"
355
-
version = "1.20.2"
356
-
source = "registry+https://github.com/rust-lang/crates.io-index"
357
-
checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
358
-
359
-
[[package]]
360
-
name = "overload"
361
-
version = "0.1.1"
362
source = "registry+https://github.com/rust-lang/crates.io-index"
363
-
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
364
365
[[package]]
366
name = "pin-project-lite"
367
-
version = "0.2.15"
368
source = "registry+https://github.com/rust-lang/crates.io-index"
369
-
checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"
370
371
[[package]]
372
name = "pkg-config"
373
-
version = "0.3.31"
374
source = "registry+https://github.com/rust-lang/crates.io-index"
375
-
checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
376
377
[[package]]
378
name = "proc-macro2"
379
-
version = "1.0.92"
380
source = "registry+https://github.com/rust-lang/crates.io-index"
381
-
checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0"
382
dependencies = [
383
"unicode-ident",
384
]
385
386
[[package]]
387
name = "quote"
388
-
version = "1.0.37"
389
source = "registry+https://github.com/rust-lang/crates.io-index"
390
-
checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
391
dependencies = [
392
"proc-macro2",
393
]
···
406
"smallvec",
407
]
408
409
[[package]]
410
name = "ryu"
411
-
version = "1.0.18"
412
source = "registry+https://github.com/rust-lang/crates.io-index"
413
-
checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
414
415
[[package]]
416
name = "sea-query"
417
-
version = "0.32.1"
418
source = "registry+https://github.com/rust-lang/crates.io-index"
419
-
checksum = "085e94f7d7271c0393ac2d164a39994b1dff1b06bc40cd9a0da04f3d672b0fee"
420
dependencies = [
421
"inherent",
422
"sea-query-derive",
···
424
425
[[package]]
426
name = "sea-query-derive"
427
-
version = "0.4.2"
428
source = "registry+https://github.com/rust-lang/crates.io-index"
429
-
checksum = "9834af2c4bd8c5162f00c89f1701fb6886119a88062cf76fe842ea9e232b9839"
430
dependencies = [
431
"darling",
432
"heck",
433
"proc-macro2",
434
"quote",
435
"syn",
436
-
"thiserror 1.0.69",
437
]
438
439
[[package]]
440
name = "serde"
441
-
version = "1.0.215"
442
source = "registry+https://github.com/rust-lang/crates.io-index"
443
-
checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f"
444
dependencies = [
445
"serde_derive",
446
]
447
448
[[package]]
449
name = "serde_derive"
450
-
version = "1.0.215"
451
source = "registry+https://github.com/rust-lang/crates.io-index"
452
-
checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
453
dependencies = [
454
"proc-macro2",
455
"quote",
···
458
459
[[package]]
460
name = "serde_json"
461
-
version = "1.0.133"
462
source = "registry+https://github.com/rust-lang/crates.io-index"
463
-
checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377"
464
dependencies = [
465
"itoa",
466
"memchr",
467
"ryu",
468
"serde",
469
]
470
471
[[package]]
···
485
486
[[package]]
487
name = "smallvec"
488
-
version = "1.13.2"
489
source = "registry+https://github.com/rust-lang/crates.io-index"
490
-
checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
491
492
[[package]]
493
name = "sqlformat"
494
-
version = "0.2.6"
495
source = "registry+https://github.com/rust-lang/crates.io-index"
496
-
checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790"
497
dependencies = [
498
-
"nom",
499
"unicode_categories",
500
]
501
502
[[package]]
503
name = "syn"
504
-
version = "2.0.90"
505
source = "registry+https://github.com/rust-lang/crates.io-index"
506
-
checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31"
507
dependencies = [
508
"proc-macro2",
509
"quote",
···
512
513
[[package]]
514
name = "thiserror"
515
-
version = "1.0.69"
516
-
source = "registry+https://github.com/rust-lang/crates.io-index"
517
-
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
518
-
dependencies = [
519
-
"thiserror-impl 1.0.69",
520
-
]
521
-
522
-
[[package]]
523
-
name = "thiserror"
524
-
version = "2.0.4"
525
-
source = "registry+https://github.com/rust-lang/crates.io-index"
526
-
checksum = "2f49a1853cf82743e3b7950f77e0f4d622ca36cf4317cba00c767838bac8d490"
527
-
dependencies = [
528
-
"thiserror-impl 2.0.4",
529
-
]
530
-
531
-
[[package]]
532
-
name = "thiserror-impl"
533
-
version = "1.0.69"
534
source = "registry+https://github.com/rust-lang/crates.io-index"
535
-
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
536
dependencies = [
537
-
"proc-macro2",
538
-
"quote",
539
-
"syn",
540
]
541
542
[[package]]
543
name = "thiserror-impl"
544
-
version = "2.0.4"
545
source = "registry+https://github.com/rust-lang/crates.io-index"
546
-
checksum = "8381894bb3efe0c4acac3ded651301ceee58a15d47c2e34885ed1908ad667061"
547
dependencies = [
548
"proc-macro2",
549
"quote",
···
552
553
[[package]]
554
name = "thread_local"
555
-
version = "1.1.8"
556
source = "registry+https://github.com/rust-lang/crates.io-index"
557
-
checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
558
dependencies = [
559
"cfg-if",
560
-
"once_cell",
561
]
562
563
[[package]]
···
573
574
[[package]]
575
name = "tracing-attributes"
576
-
version = "0.1.28"
577
source = "registry+https://github.com/rust-lang/crates.io-index"
578
-
checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
579
dependencies = [
580
"proc-macro2",
581
"quote",
···
584
585
[[package]]
586
name = "tracing-core"
587
-
version = "0.1.33"
588
source = "registry+https://github.com/rust-lang/crates.io-index"
589
-
checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
590
dependencies = [
591
"once_cell",
592
"valuable",
···
605
606
[[package]]
607
name = "tracing-subscriber"
608
-
version = "0.3.19"
609
source = "registry+https://github.com/rust-lang/crates.io-index"
610
-
checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
611
dependencies = [
612
"nu-ansi-term",
613
"sharded-slab",
···
619
620
[[package]]
621
name = "unicode-ident"
622
-
version = "1.0.14"
623
source = "registry+https://github.com/rust-lang/crates.io-index"
624
-
checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83"
625
626
[[package]]
627
name = "unicode_categories"
···
631
632
[[package]]
633
name = "valuable"
634
-
version = "0.1.0"
635
source = "registry+https://github.com/rust-lang/crates.io-index"
636
-
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
637
638
[[package]]
639
name = "vcpkg"
···
649
650
[[package]]
651
name = "wasm-bindgen"
652
-
version = "0.2.97"
653
source = "registry+https://github.com/rust-lang/crates.io-index"
654
-
checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c"
655
dependencies = [
656
"cfg-if",
657
"once_cell",
658
"wasm-bindgen-macro",
659
]
660
661
[[package]]
662
name = "wasm-bindgen-backend"
663
-
version = "0.2.97"
664
source = "registry+https://github.com/rust-lang/crates.io-index"
665
-
checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd"
666
dependencies = [
667
"bumpalo",
668
"log",
669
-
"once_cell",
670
"proc-macro2",
671
"quote",
672
"syn",
···
675
676
[[package]]
677
name = "wasm-bindgen-macro"
678
-
version = "0.2.97"
679
source = "registry+https://github.com/rust-lang/crates.io-index"
680
-
checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051"
681
dependencies = [
682
"quote",
683
"wasm-bindgen-macro-support",
···
685
686
[[package]]
687
name = "wasm-bindgen-macro-support"
688
-
version = "0.2.97"
689
source = "registry+https://github.com/rust-lang/crates.io-index"
690
-
checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d"
691
dependencies = [
692
"proc-macro2",
693
"quote",
···
698
699
[[package]]
700
name = "wasm-bindgen-shared"
701
-
version = "0.2.97"
702
source = "registry+https://github.com/rust-lang/crates.io-index"
703
-
checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49"
704
705
[[package]]
706
-
name = "winapi"
707
-
version = "0.3.9"
708
source = "registry+https://github.com/rust-lang/crates.io-index"
709
-
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
710
dependencies = [
711
-
"winapi-i686-pc-windows-gnu",
712
-
"winapi-x86_64-pc-windows-gnu",
713
]
714
715
[[package]]
716
-
name = "winapi-i686-pc-windows-gnu"
717
-
version = "0.4.0"
718
source = "registry+https://github.com/rust-lang/crates.io-index"
719
-
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
720
721
[[package]]
722
-
name = "winapi-x86_64-pc-windows-gnu"
723
version = "0.4.0"
724
source = "registry+https://github.com/rust-lang/crates.io-index"
725
-
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
726
727
[[package]]
728
-
name = "windows-core"
729
version = "0.52.0"
730
source = "registry+https://github.com/rust-lang/crates.io-index"
731
-
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
732
dependencies = [
733
"windows-targets",
734
]
···
797
source = "registry+https://github.com/rust-lang/crates.io-index"
798
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
799
800
[[package]]
801
name = "zerocopy"
802
-
version = "0.7.35"
803
source = "registry+https://github.com/rust-lang/crates.io-index"
804
-
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
805
dependencies = [
806
"zerocopy-derive",
807
]
808
809
[[package]]
810
name = "zerocopy-derive"
811
-
version = "0.7.35"
812
source = "registry+https://github.com/rust-lang/crates.io-index"
813
-
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
814
dependencies = [
815
"proc-macro2",
816
"quote",
···
4
5
[[package]]
6
name = "ahash"
7
+
version = "0.8.12"
8
source = "registry+https://github.com/rust-lang/crates.io-index"
9
+
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
10
dependencies = [
11
"cfg-if",
12
"once_cell",
···
14
"zerocopy",
15
]
16
17
[[package]]
18
name = "android_system_properties"
19
version = "0.1.5"
···
25
26
[[package]]
27
name = "anyhow"
28
+
version = "1.0.100"
29
source = "registry+https://github.com/rust-lang/crates.io-index"
30
+
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
31
32
[[package]]
33
name = "anymap"
···
37
38
[[package]]
39
name = "autocfg"
40
+
version = "1.5.0"
41
source = "registry+https://github.com/rust-lang/crates.io-index"
42
+
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
43
44
[[package]]
45
name = "bitflags"
46
+
version = "2.9.4"
47
source = "registry+https://github.com/rust-lang/crates.io-index"
48
+
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
49
50
[[package]]
51
name = "bumpalo"
52
+
version = "3.19.0"
53
source = "registry+https://github.com/rust-lang/crates.io-index"
54
+
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
55
56
[[package]]
57
name = "cc"
58
+
version = "1.2.38"
59
source = "registry+https://github.com/rust-lang/crates.io-index"
60
+
checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9"
61
dependencies = [
62
+
"find-msvc-tools",
63
"shlex",
64
]
65
66
[[package]]
67
name = "cfg-if"
68
+
version = "1.0.3"
69
source = "registry+https://github.com/rust-lang/crates.io-index"
70
+
checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
71
72
[[package]]
73
name = "chrono"
74
+
version = "0.4.42"
75
source = "registry+https://github.com/rust-lang/crates.io-index"
76
+
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
77
dependencies = [
78
"iana-time-zone",
79
"js-sys",
80
"num-traits",
81
"serde",
82
"wasm-bindgen",
83
+
"windows-link",
84
]
85
86
[[package]]
···
91
92
[[package]]
93
name = "darling"
94
+
version = "0.20.11"
95
source = "registry+https://github.com/rust-lang/crates.io-index"
96
+
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
97
dependencies = [
98
"darling_core",
99
"darling_macro",
···
101
102
[[package]]
103
name = "darling_core"
104
+
version = "0.20.11"
105
source = "registry+https://github.com/rust-lang/crates.io-index"
106
+
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
107
dependencies = [
108
"fnv",
109
"ident_case",
···
114
115
[[package]]
116
name = "darling_macro"
117
+
version = "0.20.11"
118
source = "registry+https://github.com/rust-lang/crates.io-index"
119
+
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
120
dependencies = [
121
"darling_core",
122
"quote",
···
138
"sea-query",
139
"serde",
140
"serde_json",
141
+
"thiserror",
142
"tracing",
143
"tracing-subscriber",
144
]
···
154
155
[[package]]
156
name = "eloquent"
157
+
version = "2.0.4"
158
source = "registry+https://github.com/rust-lang/crates.io-index"
159
+
checksum = "ebac9654d805c45acdc34fbd1662c9fb2f0f83212a5d1af5d535c378233ff1b9"
160
dependencies = [
161
"eloquent_core",
162
]
163
164
[[package]]
165
name = "eloquent_core"
166
+
version = "2.0.4"
167
source = "registry+https://github.com/rust-lang/crates.io-index"
168
+
checksum = "d29024f25aa28620ab42d49ab4d1ca77ec5fa8140389a9d3ad8b7ac980a7b640"
169
dependencies = [
170
"log",
171
"sqlformat",
···
183
source = "registry+https://github.com/rust-lang/crates.io-index"
184
checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
185
186
+
[[package]]
187
+
name = "find-msvc-tools"
188
+
version = "0.1.2"
189
+
source = "registry+https://github.com/rust-lang/crates.io-index"
190
+
checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959"
191
+
192
[[package]]
193
name = "fnv"
194
version = "1.0.7"
···
227
228
[[package]]
229
name = "iana-time-zone"
230
+
version = "0.1.64"
231
source = "registry+https://github.com/rust-lang/crates.io-index"
232
+
checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
233
dependencies = [
234
"android_system_properties",
235
"core-foundation-sys",
236
"iana-time-zone-haiku",
237
"js-sys",
238
+
"log",
239
"wasm-bindgen",
240
"windows-core",
241
]
···
257
258
[[package]]
259
name = "inherent"
260
+
version = "1.0.13"
261
source = "registry+https://github.com/rust-lang/crates.io-index"
262
+
checksum = "c727f80bfa4a6c6e2508d2f05b6f4bfce242030bd88ed15ae5331c5b5d30fba7"
263
dependencies = [
264
"proc-macro2",
265
"quote",
···
268
269
[[package]]
270
name = "itoa"
271
+
version = "1.0.15"
272
source = "registry+https://github.com/rust-lang/crates.io-index"
273
+
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
274
275
[[package]]
276
name = "js-sys"
277
+
version = "0.3.80"
278
source = "registry+https://github.com/rust-lang/crates.io-index"
279
+
checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e"
280
dependencies = [
281
"once_cell",
282
"wasm-bindgen",
···
290
291
[[package]]
292
name = "libc"
293
+
version = "0.2.176"
294
source = "registry+https://github.com/rust-lang/crates.io-index"
295
+
checksum = "58f929b4d672ea937a23a1ab494143d968337a5f47e56d0815df1e0890ddf174"
296
297
[[package]]
298
name = "libsqlite3-sys"
···
306
307
[[package]]
308
name = "log"
309
+
version = "0.4.28"
310
source = "registry+https://github.com/rust-lang/crates.io-index"
311
+
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
312
313
[[package]]
314
name = "memchr"
315
+
version = "2.7.5"
316
source = "registry+https://github.com/rust-lang/crates.io-index"
317
+
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
318
319
[[package]]
320
name = "nu-ansi-term"
321
+
version = "0.50.1"
322
source = "registry+https://github.com/rust-lang/crates.io-index"
323
+
checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399"
324
dependencies = [
325
+
"windows-sys",
326
]
327
328
[[package]]
···
336
337
[[package]]
338
name = "once_cell"
339
+
version = "1.21.3"
340
source = "registry+https://github.com/rust-lang/crates.io-index"
341
+
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
342
343
[[package]]
344
name = "pin-project-lite"
345
+
version = "0.2.16"
346
source = "registry+https://github.com/rust-lang/crates.io-index"
347
+
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
348
349
[[package]]
350
name = "pkg-config"
351
+
version = "0.3.32"
352
source = "registry+https://github.com/rust-lang/crates.io-index"
353
+
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
354
355
[[package]]
356
name = "proc-macro2"
357
+
version = "1.0.101"
358
source = "registry+https://github.com/rust-lang/crates.io-index"
359
+
checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
360
dependencies = [
361
"unicode-ident",
362
]
363
364
[[package]]
365
name = "quote"
366
+
version = "1.0.40"
367
source = "registry+https://github.com/rust-lang/crates.io-index"
368
+
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
369
dependencies = [
370
"proc-macro2",
371
]
···
384
"smallvec",
385
]
386
387
+
[[package]]
388
+
name = "rustversion"
389
+
version = "1.0.22"
390
+
source = "registry+https://github.com/rust-lang/crates.io-index"
391
+
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
392
+
393
[[package]]
394
name = "ryu"
395
+
version = "1.0.20"
396
source = "registry+https://github.com/rust-lang/crates.io-index"
397
+
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
398
399
[[package]]
400
name = "sea-query"
401
+
version = "0.32.7"
402
source = "registry+https://github.com/rust-lang/crates.io-index"
403
+
checksum = "8a5d1c518eaf5eda38e5773f902b26ab6d5e9e9e2bb2349ca6c64cf96f80448c"
404
dependencies = [
405
"inherent",
406
"sea-query-derive",
···
408
409
[[package]]
410
name = "sea-query-derive"
411
+
version = "0.4.3"
412
source = "registry+https://github.com/rust-lang/crates.io-index"
413
+
checksum = "bae0cbad6ab996955664982739354128c58d16e126114fe88c2a493642502aab"
414
dependencies = [
415
"darling",
416
"heck",
417
"proc-macro2",
418
"quote",
419
"syn",
420
+
"thiserror",
421
]
422
423
[[package]]
424
name = "serde"
425
+
version = "1.0.226"
426
+
source = "registry+https://github.com/rust-lang/crates.io-index"
427
+
checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd"
428
+
dependencies = [
429
+
"serde_core",
430
+
"serde_derive",
431
+
]
432
+
433
+
[[package]]
434
+
name = "serde_core"
435
+
version = "1.0.226"
436
source = "registry+https://github.com/rust-lang/crates.io-index"
437
+
checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4"
438
dependencies = [
439
"serde_derive",
440
]
441
442
[[package]]
443
name = "serde_derive"
444
+
version = "1.0.226"
445
source = "registry+https://github.com/rust-lang/crates.io-index"
446
+
checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33"
447
dependencies = [
448
"proc-macro2",
449
"quote",
···
452
453
[[package]]
454
name = "serde_json"
455
+
version = "1.0.145"
456
source = "registry+https://github.com/rust-lang/crates.io-index"
457
+
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
458
dependencies = [
459
"itoa",
460
"memchr",
461
"ryu",
462
"serde",
463
+
"serde_core",
464
]
465
466
[[package]]
···
480
481
[[package]]
482
name = "smallvec"
483
+
version = "1.15.1"
484
source = "registry+https://github.com/rust-lang/crates.io-index"
485
+
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
486
487
[[package]]
488
name = "sqlformat"
489
+
version = "0.3.5"
490
source = "registry+https://github.com/rust-lang/crates.io-index"
491
+
checksum = "a0d7b3e8a3b6f2ee93ac391a0f757c13790caa0147892e3545cd549dd5b54bc0"
492
dependencies = [
493
"unicode_categories",
494
+
"winnow",
495
]
496
497
[[package]]
498
name = "syn"
499
+
version = "2.0.106"
500
source = "registry+https://github.com/rust-lang/crates.io-index"
501
+
checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
502
dependencies = [
503
"proc-macro2",
504
"quote",
···
507
508
[[package]]
509
name = "thiserror"
510
+
version = "2.0.16"
511
source = "registry+https://github.com/rust-lang/crates.io-index"
512
+
checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0"
513
dependencies = [
514
+
"thiserror-impl",
515
]
516
517
[[package]]
518
name = "thiserror-impl"
519
+
version = "2.0.16"
520
source = "registry+https://github.com/rust-lang/crates.io-index"
521
+
checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960"
522
dependencies = [
523
"proc-macro2",
524
"quote",
···
527
528
[[package]]
529
name = "thread_local"
530
+
version = "1.1.9"
531
source = "registry+https://github.com/rust-lang/crates.io-index"
532
+
checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185"
533
dependencies = [
534
"cfg-if",
535
]
536
537
[[package]]
···
547
548
[[package]]
549
name = "tracing-attributes"
550
+
version = "0.1.30"
551
source = "registry+https://github.com/rust-lang/crates.io-index"
552
+
checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
553
dependencies = [
554
"proc-macro2",
555
"quote",
···
558
559
[[package]]
560
name = "tracing-core"
561
+
version = "0.1.34"
562
source = "registry+https://github.com/rust-lang/crates.io-index"
563
+
checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
564
dependencies = [
565
"once_cell",
566
"valuable",
···
579
580
[[package]]
581
name = "tracing-subscriber"
582
+
version = "0.3.20"
583
source = "registry+https://github.com/rust-lang/crates.io-index"
584
+
checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5"
585
dependencies = [
586
"nu-ansi-term",
587
"sharded-slab",
···
593
594
[[package]]
595
name = "unicode-ident"
596
+
version = "1.0.19"
597
source = "registry+https://github.com/rust-lang/crates.io-index"
598
+
checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
599
600
[[package]]
601
name = "unicode_categories"
···
605
606
[[package]]
607
name = "valuable"
608
+
version = "0.1.1"
609
source = "registry+https://github.com/rust-lang/crates.io-index"
610
+
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
611
612
[[package]]
613
name = "vcpkg"
···
623
624
[[package]]
625
name = "wasm-bindgen"
626
+
version = "0.2.103"
627
source = "registry+https://github.com/rust-lang/crates.io-index"
628
+
checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819"
629
dependencies = [
630
"cfg-if",
631
"once_cell",
632
+
"rustversion",
633
"wasm-bindgen-macro",
634
+
"wasm-bindgen-shared",
635
]
636
637
[[package]]
638
name = "wasm-bindgen-backend"
639
+
version = "0.2.103"
640
source = "registry+https://github.com/rust-lang/crates.io-index"
641
+
checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c"
642
dependencies = [
643
"bumpalo",
644
"log",
645
"proc-macro2",
646
"quote",
647
"syn",
···
650
651
[[package]]
652
name = "wasm-bindgen-macro"
653
+
version = "0.2.103"
654
source = "registry+https://github.com/rust-lang/crates.io-index"
655
+
checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0"
656
dependencies = [
657
"quote",
658
"wasm-bindgen-macro-support",
···
660
661
[[package]]
662
name = "wasm-bindgen-macro-support"
663
+
version = "0.2.103"
664
source = "registry+https://github.com/rust-lang/crates.io-index"
665
+
checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32"
666
dependencies = [
667
"proc-macro2",
668
"quote",
···
673
674
[[package]]
675
name = "wasm-bindgen-shared"
676
+
version = "0.2.103"
677
source = "registry+https://github.com/rust-lang/crates.io-index"
678
+
checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf"
679
+
dependencies = [
680
+
"unicode-ident",
681
+
]
682
683
[[package]]
684
+
name = "windows-core"
685
+
version = "0.62.0"
686
source = "registry+https://github.com/rust-lang/crates.io-index"
687
+
checksum = "57fe7168f7de578d2d8a05b07fd61870d2e73b4020e9f49aa00da8471723497c"
688
dependencies = [
689
+
"windows-implement",
690
+
"windows-interface",
691
+
"windows-link",
692
+
"windows-result",
693
+
"windows-strings",
694
]
695
696
[[package]]
697
+
name = "windows-implement"
698
+
version = "0.60.0"
699
+
source = "registry+https://github.com/rust-lang/crates.io-index"
700
+
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
701
+
dependencies = [
702
+
"proc-macro2",
703
+
"quote",
704
+
"syn",
705
+
]
706
+
707
+
[[package]]
708
+
name = "windows-interface"
709
+
version = "0.59.1"
710
+
source = "registry+https://github.com/rust-lang/crates.io-index"
711
+
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
712
+
dependencies = [
713
+
"proc-macro2",
714
+
"quote",
715
+
"syn",
716
+
]
717
+
718
+
[[package]]
719
+
name = "windows-link"
720
+
version = "0.2.0"
721
source = "registry+https://github.com/rust-lang/crates.io-index"
722
+
checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65"
723
724
[[package]]
725
+
name = "windows-result"
726
version = "0.4.0"
727
source = "registry+https://github.com/rust-lang/crates.io-index"
728
+
checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f"
729
+
dependencies = [
730
+
"windows-link",
731
+
]
732
+
733
+
[[package]]
734
+
name = "windows-strings"
735
+
version = "0.5.0"
736
+
source = "registry+https://github.com/rust-lang/crates.io-index"
737
+
checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda"
738
+
dependencies = [
739
+
"windows-link",
740
+
]
741
742
[[package]]
743
+
name = "windows-sys"
744
version = "0.52.0"
745
source = "registry+https://github.com/rust-lang/crates.io-index"
746
+
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
747
dependencies = [
748
"windows-targets",
749
]
···
812
source = "registry+https://github.com/rust-lang/crates.io-index"
813
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
814
815
+
[[package]]
816
+
name = "winnow"
817
+
version = "0.6.26"
818
+
source = "registry+https://github.com/rust-lang/crates.io-index"
819
+
checksum = "1e90edd2ac1aa278a5c4599b1d89cf03074b610800f866d4026dc199d7929a28"
820
+
dependencies = [
821
+
"memchr",
822
+
]
823
+
824
[[package]]
825
name = "zerocopy"
826
+
version = "0.8.27"
827
source = "registry+https://github.com/rust-lang/crates.io-index"
828
+
checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
829
dependencies = [
830
"zerocopy-derive",
831
]
832
833
[[package]]
834
name = "zerocopy-derive"
835
+
version = "0.8.27"
836
source = "registry+https://github.com/rust-lang/crates.io-index"
837
+
checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
838
dependencies = [
839
"proc-macro2",
840
"quote",
+5
src/change_tracking_disable.sql
+5
src/change_tracking_disable.sql
+40
src/change_tracking_enable.sql
+40
src/change_tracking_enable.sql
···
···
1
+
-- Runs when a component is attached
2
+
create trigger if not exists components_changes_attach_trigger
3
+
after insert
4
+
on components for each row
5
+
begin
6
+
insert into changes (entity, component, change)
7
+
select new.entity, new.component, 'create'
8
+
where not exists (
9
+
select true from components
10
+
where entity = new.entity
11
+
and component != new.component
12
+
);
13
+
14
+
insert into changes (entity, component, change)
15
+
select new.entity, new.component, 'attach';
16
+
end;
17
+
18
+
-- Runs when a component is changed
19
+
create trigger if not exists components_changes_update_trigger
20
+
after update
21
+
on components for each row
22
+
begin
23
+
insert into changes (entity, component, change)
24
+
values (new.entity, new.component, 'attach');
25
+
end;
26
+
27
+
-- Runs when a component is detached
28
+
create trigger if not exists components_changes_detach_trigger
29
+
after delete
30
+
on components for each row
31
+
begin
32
+
insert into changes (entity, component, change)
33
+
values (old.entity, old.component, 'detach');
34
+
35
+
insert into changes (entity, component, change)
36
+
select old.entity, old.component, 'destroy'
37
+
where not exists (
38
+
select true from components where entity = old.entity
39
+
);
40
+
end;
+1
-1
src/entity.rs
+1
-1
src/entity.rs
+138
-2
src/lib.rs
+138
-2
src/lib.rs
···
1
pub mod component;
2
-
3
pub use component::{Component, ComponentRead, ComponentWrite};
4
5
pub mod entity;
···
76
}
77
}
78
79
impl Ecs {
80
pub fn new_entity<'a>(&'a self) -> NewEntity<'a> {
81
Entity::without_id(self)
···
181
}
182
}
183
184
pub mod rusqlite {
185
pub use rusqlite::*;
186
}
···
216
#[cfg(test)]
217
mod tests {
218
// #[derive(Component)] derives `impl ecsdb::Component for ...`
219
-
use crate::{self as ecsdb, Ecs};
220
use crate::{BelongsTo, Component};
221
222
use anyhow::anyhow;
···
572
573
Ok(())
574
}
575
}
···
1
pub mod component;
2
pub use component::{Component, ComponentRead, ComponentWrite};
3
4
pub mod entity;
···
75
}
76
}
77
78
+
impl Ecs {
79
+
pub fn enable_change_tracking(&mut self) -> Result<(), Error> {
80
+
self.conn
81
+
.execute_batch(include_str!("change_tracking_enable.sql"))?;
82
+
Ok(())
83
+
}
84
+
85
+
pub fn disable_change_tracking(&mut self) -> Result<(), Error> {
86
+
self.conn
87
+
.execute_batch(include_str!("change_tracking_disable.sql"))?;
88
+
Ok(())
89
+
}
90
+
}
91
+
92
impl Ecs {
93
pub fn new_entity<'a>(&'a self) -> NewEntity<'a> {
94
Entity::without_id(self)
···
194
}
195
}
196
197
+
#[derive(Debug, PartialEq, Eq)]
198
+
pub enum Change {
199
+
Create { entity: EntityId },
200
+
Attach { entity: EntityId, component: String },
201
+
Detach { entity: EntityId, component: String },
202
+
Destroy { entity: EntityId },
203
+
}
204
+
205
+
impl Ecs {
206
+
pub fn changes(&self) -> Result<Vec<Change>, Error> {
207
+
let mut stmt = self
208
+
.conn
209
+
.prepare_cached("select * from changes order by sequence asc")?;
210
+
211
+
let changes = stmt
212
+
.query_map(params![], |row| {
213
+
let entity = row.get("entity")?;
214
+
let change: String = row.get("change")?;
215
+
216
+
match change.as_str() {
217
+
"create" => Ok(Change::Create { entity }),
218
+
"attach" => {
219
+
let component = row.get("component")?;
220
+
Ok(Change::Attach { entity, component })
221
+
}
222
+
"detach" => {
223
+
let component = row.get("component")?;
224
+
Ok(Change::Detach { entity, component })
225
+
}
226
+
"destroy" => Ok(Change::Destroy { entity }),
227
+
other => {
228
+
panic!("Invalid 'changes.change' {other:?}");
229
+
}
230
+
}
231
+
})?
232
+
.collect::<Result<_, _>>()?;
233
+
234
+
Ok(changes)
235
+
}
236
+
237
+
pub fn clear_changes(&self) -> Result<(), Error> {
238
+
self.conn.execute("delete from changes", params![])?;
239
+
Ok(())
240
+
}
241
+
}
242
+
243
pub mod rusqlite {
244
pub use rusqlite::*;
245
}
···
275
#[cfg(test)]
276
mod tests {
277
// #[derive(Component)] derives `impl ecsdb::Component for ...`
278
+
use crate::{self as ecsdb, Change, Ecs};
279
use crate::{BelongsTo, Component};
280
281
use anyhow::anyhow;
···
631
632
Ok(())
633
}
634
+
635
+
#[test]
636
+
fn change_tracking_enable_disable() -> Result<(), anyhow::Error> {
637
+
let mut ecs = super::Ecs::open_in_memory()?;
638
+
ecs.enable_change_tracking()?;
639
+
640
+
assert_eq!(ecs.changes()?, vec![]);
641
+
642
+
ecs.new_entity().attach(A);
643
+
assert_eq!(ecs.changes()?.len(), 2);
644
+
645
+
ecs.disable_change_tracking()?;
646
+
ecs.clear_changes()?;
647
+
648
+
ecs.new_entity().attach(A);
649
+
assert!(ecs.changes()?.is_empty());
650
+
651
+
Ok(())
652
+
}
653
+
654
+
#[test]
655
+
fn change_tracking() -> Result<(), anyhow::Error> {
656
+
let mut ecs = super::Ecs::open_in_memory()?;
657
+
ecs.enable_change_tracking()?;
658
+
659
+
let mut changes = vec![];
660
+
661
+
assert_eq!(ecs.changes()?, vec![]);
662
+
663
+
let entity = ecs.new_entity().attach(A);
664
+
665
+
changes.extend([
666
+
Change::Create {
667
+
entity: entity.id(),
668
+
},
669
+
Change::Attach {
670
+
entity: entity.id(),
671
+
component: <A as Component>::component_name().to_owned(),
672
+
},
673
+
]);
674
+
675
+
assert_eq!(ecs.changes()?, changes);
676
+
677
+
entity.attach(B);
678
+
changes.push(Change::Attach {
679
+
entity: entity.id(),
680
+
component: <B as Component>::component_name().to_owned(),
681
+
});
682
+
683
+
assert_eq!(ecs.changes()?, changes);
684
+
685
+
entity.detach::<B>();
686
+
changes.push(Change::Detach {
687
+
entity: entity.id(),
688
+
component: <B as Component>::component_name().to_owned(),
689
+
});
690
+
691
+
assert_eq!(ecs.changes()?, changes);
692
+
693
+
entity.detach::<A>();
694
+
changes.extend([
695
+
Change::Detach {
696
+
entity: entity.id(),
697
+
component: <A as Component>::component_name().to_owned(),
698
+
},
699
+
Change::Destroy {
700
+
entity: entity.id(),
701
+
},
702
+
]);
703
+
704
+
assert_eq!(ecs.changes()?, changes);
705
+
706
+
ecs.clear_changes()?;
707
+
assert!(ecs.changes()?.is_empty());
708
+
709
+
Ok(())
710
+
}
711
}
+7
src/schema.sql
+7
src/schema.sql
+1
-1
src/system.rs
+1
-1
src/system.rs