diff --git a/coverage/coverage.out b/coverage/coverage.out index 0f4673e..59648fc 100644 --- a/coverage/coverage.out +++ b/coverage/coverage.out @@ -1,86 +1,4 @@ mode: set -github.com/echovault/echovault/pkg/modules/admin/commands.go:28.115,34.29 4 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:34.29,35.54 1 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:35.54,41.42 4 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:41.42,43.5 1 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:45.4,48.12 3 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:51.3,51.36 1 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:51.36,58.43 5 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:58.43,60.5 1 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:62.4,64.21 2 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:68.2,70.25 2 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:73.109,77.35 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:77.35,78.65 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:78.65,79.41 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:79.41,81.5 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:82.4,82.12 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:84.3,84.13 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:87.2,87.51 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:90.110,91.18 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:92.9,97.36 4 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:97.36,98.66 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:98.66,99.52 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:99.52,103.6 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:104.5,104.13 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:106.4,107.14 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:109.3,110.26 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:112.9,116.45 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:116.45,118.4 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:119.3,119.42 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:119.42,123.37 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:123.37,124.67 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:124.67,125.53 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:125.53,126.59 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:126.59,130.8 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:132.6,132.14 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:134.5,134.54 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:134.54,137.6 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:139.9,139.50 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:139.50,143.37 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:143.37,144.67 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:144.67,145.53 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:145.53,147.24 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:147.24,150.8 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:152.6,152.14 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:154.5,154.33 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:154.33,157.6 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:159.9,159.49 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:159.49,163.37 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:163.37,164.67 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:164.67,165.53 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:165.53,166.55 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:166.55,170.8 3 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:172.6,172.14 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:174.5,174.50 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:174.50,177.6 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:179.9,181.4 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:182.3,183.26 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:184.10,185.50 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:189.103,191.2 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:193.33,201.60 1 1 -github.com/echovault/echovault/pkg/modules/admin/commands.go:201.60,201.86 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:210.60,212.5 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:220.62,220.88 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:229.62,229.88 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:239.62,239.88 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:250.60,252.5 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:253.113,254.49 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:254.49,256.6 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:257.5,257.41 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:266.60,268.5 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:269.113,271.18 2 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:271.18,273.6 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:274.5,274.53 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:283.60,285.5 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:286.113,287.47 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:287.47,289.6 1 0 -github.com/echovault/echovault/pkg/modules/admin/commands.go:290.5,290.41 1 0 -github.com/echovault/echovault/pkg/modules/connection/commands.go:25.108,26.18 1 1 -github.com/echovault/echovault/pkg/modules/connection/commands.go:27.10,28.50 1 1 -github.com/echovault/echovault/pkg/modules/connection/commands.go:29.9,30.34 1 1 -github.com/echovault/echovault/pkg/modules/connection/commands.go:31.9,32.72 1 1 -github.com/echovault/echovault/pkg/modules/connection/commands.go:36.33,44.60 1 0 -github.com/echovault/echovault/pkg/modules/connection/commands.go:44.60,46.5 1 0 github.com/echovault/echovault/pkg/echovault/api_acl.go:58.72,60.23 2 0 github.com/echovault/echovault/pkg/echovault/api_acl.go:60.23,62.3 1 0 github.com/echovault/echovault/pkg/echovault/api_acl.go:63.2,64.16 2 0 @@ -623,18 +541,18 @@ github.com/echovault/echovault/pkg/echovault/api_sorted_set.go:562.47,564.3 1 1 github.com/echovault/echovault/pkg/echovault/api_sorted_set.go:566.2,567.16 2 1 github.com/echovault/echovault/pkg/echovault/api_sorted_set.go:567.16,569.3 1 1 github.com/echovault/echovault/pkg/echovault/api_sorted_set.go:571.2,571.41 1 1 -github.com/echovault/echovault/pkg/echovault/api_string.go:22.84,29.16 2 0 +github.com/echovault/echovault/pkg/echovault/api_string.go:22.84,29.16 2 1 github.com/echovault/echovault/pkg/echovault/api_string.go:29.16,31.3 1 0 -github.com/echovault/echovault/pkg/echovault/api_string.go:32.2,32.41 1 0 -github.com/echovault/echovault/pkg/echovault/api_string.go:35.58,37.16 2 0 +github.com/echovault/echovault/pkg/echovault/api_string.go:32.2,32.41 1 1 +github.com/echovault/echovault/pkg/echovault/api_string.go:35.58,37.16 2 1 github.com/echovault/echovault/pkg/echovault/api_string.go:37.16,39.3 1 0 -github.com/echovault/echovault/pkg/echovault/api_string.go:40.2,40.41 1 0 -github.com/echovault/echovault/pkg/echovault/api_string.go:43.77,50.16 2 0 +github.com/echovault/echovault/pkg/echovault/api_string.go:40.2,40.41 1 1 +github.com/echovault/echovault/pkg/echovault/api_string.go:43.77,50.16 2 1 github.com/echovault/echovault/pkg/echovault/api_string.go:50.16,52.3 1 0 -github.com/echovault/echovault/pkg/echovault/api_string.go:53.2,53.40 1 0 -github.com/echovault/echovault/pkg/echovault/api_string.go:56.79,63.16 2 0 +github.com/echovault/echovault/pkg/echovault/api_string.go:53.2,53.40 1 1 +github.com/echovault/echovault/pkg/echovault/api_string.go:56.79,63.16 2 1 github.com/echovault/echovault/pkg/echovault/api_string.go:63.16,65.3 1 0 -github.com/echovault/echovault/pkg/echovault/api_string.go:66.2,66.40 1 0 +github.com/echovault/echovault/pkg/echovault/api_string.go:66.2,66.40 1 1 github.com/echovault/echovault/pkg/echovault/cluster.go:25.45,27.2 1 1 github.com/echovault/echovault/pkg/echovault/cluster.go:29.84,40.16 4 0 github.com/echovault/echovault/pkg/echovault/cluster.go:40.16,42.3 1 0 @@ -654,139 +572,139 @@ github.com/echovault/echovault/pkg/echovault/cluster.go:87.9,89.3 1 0 github.com/echovault/echovault/pkg/echovault/cluster.go:91.2,91.20 1 0 github.com/echovault/echovault/pkg/echovault/cluster.go:91.20,93.3 1 0 github.com/echovault/echovault/pkg/echovault/cluster.go:95.2,95.24 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:91.66,92.36 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:92.36,94.3 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:97.66,98.36 1 1 -github.com/echovault/echovault/pkg/echovault/echovault.go:98.36,100.3 1 1 -github.com/echovault/echovault/pkg/echovault/echovault.go:103.72,104.36 1 1 -github.com/echovault/echovault/pkg/echovault/echovault.go:104.36,106.3 1 1 -github.com/echovault/echovault/pkg/echovault/echovault.go:109.69,119.33 2 1 -github.com/echovault/echovault/pkg/echovault/echovault.go:119.33,121.3 1 1 -github.com/echovault/echovault/pkg/echovault/echovault.go:123.2,131.29 4 1 -github.com/echovault/echovault/pkg/echovault/echovault.go:131.29,137.49 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:137.49,139.44 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:139.44,140.46 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:140.46,142.7 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:144.5,144.17 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:147.3,155.5 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:156.8,166.65 1 1 -github.com/echovault/echovault/pkg/echovault/echovault.go:166.65,168.44 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:168.44,169.46 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:169.46,171.7 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:173.5,173.17 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:175.72,177.67 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:177.67,179.6 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:180.5,180.68 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:180.68,182.6 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:183.5,184.34 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:188.3,193.60 1 1 -github.com/echovault/echovault/pkg/echovault/echovault.go:193.60,195.44 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:195.44,196.46 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:196.46,198.7 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:200.5,200.17 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:202.68,204.67 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:204.67,206.6 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:207.5,207.69 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:207.69,209.6 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:210.5,211.34 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:213.51,215.19 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:215.19,217.6 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:223.2,223.57 1 1 -github.com/echovault/echovault/pkg/echovault/echovault.go:223.57,224.13 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:224.13,225.8 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:225.8,227.83 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:227.83,229.6 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:234.2,234.18 1 1 -github.com/echovault/echovault/pkg/echovault/echovault.go:237.37,246.16 4 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:246.16,248.3 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:250.2,250.15 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:250.15,253.3 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:255.2,255.27 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:255.27,257.15 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:257.15,259.4 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:259.9,261.4 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:263.3,264.49 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:264.49,266.18 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:266.18,268.5 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:269.4,269.42 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:272.3,275.16 3 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:275.16,277.37 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:277.37,279.19 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:279.19,281.6 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:282.5,283.19 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:283.19,285.6 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:286.5,286.61 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:286.61,288.6 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:292.3,296.5 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:300.2,300.6 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:300.6,302.17 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:302.17,304.12 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:307.3,307.35 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:311.58,313.23 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:313.23,315.3 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:317.2,323.6 4 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:323.6,326.43 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:326.43,329.9 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:332.3,332.17 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:332.17,334.9 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:337.3,339.43 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:339.43,340.9 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:343.3,343.17 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:343.17,344.87 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:344.87,346.5 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:347.4,347.12 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:350.3,353.20 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:353.20,354.12 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:357.3,357.28 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:357.28,359.12 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:363.3,364.7 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:364.7,366.41 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:366.41,368.19 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:368.19,370.6 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:371.5,371.10 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:373.4,374.21 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:374.21,375.10 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:377.4,377.27 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:381.2,381.37 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:381.37,383.3 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:386.34,389.45 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:389.45,392.3 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:394.2,394.26 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:394.26,398.33 3 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:398.33,400.4 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:403.2,403.27 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:403.27,406.22 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:406.22,408.18 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:408.18,410.5 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:414.3,414.47 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:414.47,416.18 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:416.18,418.5 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:422.2,422.19 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:425.47,426.38 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:426.38,428.3 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:430.2,430.12 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:430.12,431.27 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:431.27,433.53 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:433.53,435.5 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:436.4,436.10 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:439.3,439.62 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:439.62,441.4 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:444.2,444.12 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:447.42,449.2 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:451.43,453.2 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:455.56,457.2 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:459.52,461.2 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:463.44,465.2 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:467.45,469.2 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:471.45,472.40 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:472.40,474.3 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:475.2,475.12 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:475.12,476.55 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:476.55,478.4 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:480.2,480.12 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:483.37,484.26 1 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:484.26,487.3 2 0 -github.com/echovault/echovault/pkg/echovault/echovault.go:490.45,507.2 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:92.66,93.36 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:93.36,95.3 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:98.66,99.36 1 1 +github.com/echovault/echovault/pkg/echovault/echovault.go:99.36,101.3 1 1 +github.com/echovault/echovault/pkg/echovault/echovault.go:104.72,105.36 1 1 +github.com/echovault/echovault/pkg/echovault/echovault.go:105.36,107.3 1 1 +github.com/echovault/echovault/pkg/echovault/echovault.go:110.69,120.33 2 1 +github.com/echovault/echovault/pkg/echovault/echovault.go:120.33,122.3 1 1 +github.com/echovault/echovault/pkg/echovault/echovault.go:124.2,132.29 4 1 +github.com/echovault/echovault/pkg/echovault/echovault.go:132.29,138.49 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:138.49,140.44 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:140.44,141.46 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:141.46,143.7 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:145.5,145.17 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:148.3,156.5 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:157.8,167.65 1 1 +github.com/echovault/echovault/pkg/echovault/echovault.go:167.65,169.44 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:169.44,170.46 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:170.46,172.7 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:174.5,174.17 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:176.72,178.67 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:178.67,180.6 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:181.5,181.68 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:181.68,183.6 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:184.5,185.34 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:189.3,194.60 1 1 +github.com/echovault/echovault/pkg/echovault/echovault.go:194.60,196.44 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:196.44,197.46 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:197.46,199.7 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:201.5,201.17 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:203.68,205.67 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:205.67,207.6 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:208.5,208.69 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:208.69,210.6 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:211.5,212.34 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:214.51,216.19 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:216.19,218.6 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:224.2,224.61 1 1 +github.com/echovault/echovault/pkg/echovault/echovault.go:224.61,225.13 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:225.13,226.8 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:226.8,228.83 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:228.83,230.6 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:235.2,235.18 1 1 +github.com/echovault/echovault/pkg/echovault/echovault.go:238.37,247.16 4 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:247.16,249.3 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:251.2,251.15 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:251.15,254.3 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:256.2,256.27 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:256.27,258.15 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:258.15,260.4 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:260.9,262.4 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:264.3,265.49 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:265.49,267.18 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:267.18,269.5 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:270.4,270.42 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:273.3,276.16 3 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:276.16,278.37 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:278.37,280.19 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:280.19,282.6 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:283.5,284.19 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:284.19,286.6 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:287.5,287.61 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:287.61,289.6 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:293.3,297.5 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:301.2,301.6 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:301.6,303.17 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:303.17,305.12 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:308.3,308.35 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:312.58,314.23 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:314.23,316.3 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:318.2,324.6 4 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:324.6,327.43 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:327.43,330.9 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:333.3,333.17 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:333.17,335.9 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:338.3,340.43 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:340.43,341.9 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:344.3,344.17 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:344.17,345.87 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:345.87,347.5 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:348.4,348.12 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:351.3,354.20 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:354.20,355.12 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:358.3,358.28 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:358.28,360.12 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:364.3,365.7 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:365.7,367.41 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:367.41,369.19 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:369.19,371.6 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:372.5,372.10 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:374.4,375.21 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:375.21,376.10 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:378.4,378.27 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:382.2,382.37 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:382.37,384.3 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:387.34,390.45 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:390.45,393.3 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:395.2,395.26 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:395.26,399.33 3 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:399.33,401.4 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:404.2,404.27 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:404.27,407.22 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:407.22,409.18 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:409.18,411.5 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:415.3,415.47 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:415.47,417.18 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:417.18,419.5 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:423.2,423.19 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:426.47,427.38 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:427.38,429.3 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:431.2,431.12 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:431.12,432.27 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:432.27,434.53 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:434.53,436.5 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:437.4,437.10 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:440.3,440.62 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:440.62,442.4 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:445.2,445.12 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:448.42,450.2 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:452.43,454.2 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:456.56,458.2 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:460.52,462.2 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:464.44,466.2 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:468.45,470.2 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:472.45,473.40 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:473.40,475.3 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:476.2,476.12 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:476.12,477.55 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:477.55,479.4 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:481.2,481.12 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:484.37,485.26 1 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:485.26,488.3 2 0 +github.com/echovault/echovault/pkg/echovault/echovault.go:491.45,508.2 2 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:34.81,37.34 2 1 github.com/echovault/echovault/pkg/echovault/keyspace.go:37.34,40.3 2 1 github.com/echovault/echovault/pkg/echovault/keyspace.go:42.2,42.6 1 1 @@ -822,16 +740,16 @@ github.com/echovault/echovault/pkg/echovault/keyspace.go:115.9,115.65 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:115.65,120.4 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:122.3,122.15 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:125.2,125.13 1 1 -github.com/echovault/echovault/pkg/echovault/keyspace.go:130.90,131.111 1 1 -github.com/echovault/echovault/pkg/echovault/keyspace.go:131.111,133.3 1 0 +github.com/echovault/echovault/pkg/echovault/keyspace.go:130.90,131.115 1 1 +github.com/echovault/echovault/pkg/echovault/keyspace.go:131.115,133.3 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:135.2,138.33 3 1 github.com/echovault/echovault/pkg/echovault/keyspace.go:138.33,149.3 5 1 github.com/echovault/echovault/pkg/echovault/keyspace.go:151.2,151.33 1 1 github.com/echovault/echovault/pkg/echovault/keyspace.go:156.80,157.58 1 1 github.com/echovault/echovault/pkg/echovault/keyspace.go:157.58,159.3 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:160.2,160.32 1 1 -github.com/echovault/echovault/pkg/echovault/keyspace.go:168.93,169.111 1 1 -github.com/echovault/echovault/pkg/echovault/keyspace.go:169.111,171.3 1 0 +github.com/echovault/echovault/pkg/echovault/keyspace.go:168.93,169.115 1 1 +github.com/echovault/echovault/pkg/echovault/keyspace.go:169.115,171.3 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:173.2,179.16 3 1 github.com/echovault/echovault/pkg/echovault/keyspace.go:179.16,181.3 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:183.2,183.27 1 1 @@ -856,19 +774,19 @@ github.com/echovault/echovault/pkg/echovault/keyspace.go:260.2,261.13 2 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:265.75,266.52 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:266.52,268.3 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:271.2,278.9 4 0 -github.com/echovault/echovault/pkg/echovault/keyspace.go:279.100,280.36 1 0 -github.com/echovault/echovault/pkg/echovault/keyspace.go:281.100,282.36 1 0 +github.com/echovault/echovault/pkg/echovault/keyspace.go:279.108,280.36 1 0 +github.com/echovault/echovault/pkg/echovault/keyspace.go:281.108,282.36 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:285.2,287.12 2 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:292.82,294.83 1 1 github.com/echovault/echovault/pkg/echovault/keyspace.go:294.83,296.3 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:298.2,298.34 1 1 github.com/echovault/echovault/pkg/echovault/keyspace.go:298.34,300.3 1 1 github.com/echovault/echovault/pkg/echovault/keyspace.go:301.2,301.55 1 0 -github.com/echovault/echovault/pkg/echovault/keyspace.go:302.24,305.36 3 0 -github.com/echovault/echovault/pkg/echovault/keyspace.go:306.24,309.36 3 0 -github.com/echovault/echovault/pkg/echovault/keyspace.go:310.25,313.50 3 0 +github.com/echovault/echovault/pkg/echovault/keyspace.go:302.28,305.36 3 0 +github.com/echovault/echovault/pkg/echovault/keyspace.go:306.28,309.36 3 0 +github.com/echovault/echovault/pkg/echovault/keyspace.go:310.29,313.50 3 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:313.50,315.4 1 0 -github.com/echovault/echovault/pkg/echovault/keyspace.go:316.25,319.50 3 0 +github.com/echovault/echovault/pkg/echovault/keyspace.go:316.29,319.50 3 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:319.50,321.4 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:323.2,323.54 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:323.54,325.3 1 0 @@ -880,7 +798,7 @@ github.com/echovault/echovault/pkg/echovault/keyspace.go:340.50,342.3 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:344.2,346.50 3 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:346.50,348.3 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:352.2,352.9 1 0 -github.com/echovault/echovault/pkg/echovault/keyspace.go:353.117,358.7 3 0 +github.com/echovault/echovault/pkg/echovault/keyspace.go:353.125,358.7 3 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:358.7,360.40 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:360.40,362.5 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:364.4,365.29 2 0 @@ -891,7 +809,7 @@ github.com/echovault/echovault/pkg/echovault/keyspace.go:370.65,372.63 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:372.63,374.6 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:378.4,381.52 3 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:381.52,383.5 1 0 -github.com/echovault/echovault/pkg/echovault/keyspace.go:385.117,390.7 3 0 +github.com/echovault/echovault/pkg/echovault/keyspace.go:385.125,390.7 3 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:390.7,392.40 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:392.40,394.5 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:396.4,397.29 2 0 @@ -902,7 +820,7 @@ github.com/echovault/echovault/pkg/echovault/keyspace.go:402.65,405.63 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:405.63,407.6 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:411.4,414.52 3 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:414.52,416.5 1 0 -github.com/echovault/echovault/pkg/echovault/keyspace.go:418.101,421.7 1 0 +github.com/echovault/echovault/pkg/echovault/keyspace.go:418.105,421.7 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:421.7,423.33 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:423.33,426.5 2 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:428.4,429.40 2 0 @@ -916,7 +834,7 @@ github.com/echovault/echovault/pkg/echovault/keyspace.go:437.65,439.8 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:442.6,445.54 3 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:445.54,447.7 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:449.5,449.10 1 0 -github.com/echovault/echovault/pkg/echovault/keyspace.go:452.102,455.7 1 0 +github.com/echovault/echovault/pkg/echovault/keyspace.go:452.106,455.7 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:455.7,462.29 5 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:462.29,464.54 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:464.54,466.6 1 0 @@ -951,908 +869,425 @@ github.com/echovault/echovault/pkg/echovault/keyspace.go:557.2,560.58 2 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:560.58,564.3 2 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:566.2,566.12 1 0 github.com/echovault/echovault/pkg/echovault/keyspace.go:569.68,573.2 3 1 -github.com/echovault/echovault/pkg/echovault/modules.go:27.59,29.2 1 0 -github.com/echovault/echovault/pkg/echovault/modules.go:31.47,33.2 1 0 -github.com/echovault/echovault/pkg/echovault/modules.go:35.50,37.2 1 0 -github.com/echovault/echovault/pkg/echovault/modules.go:39.72,40.42 1 1 -github.com/echovault/echovault/pkg/echovault/modules.go:40.42,41.46 1 1 -github.com/echovault/echovault/pkg/echovault/modules.go:41.46,43.4 1 1 -github.com/echovault/echovault/pkg/echovault/modules.go:45.2,45.69 1 0 -github.com/echovault/echovault/pkg/echovault/modules.go:48.122,50.16 2 1 -github.com/echovault/echovault/pkg/echovault/modules.go:50.16,52.3 1 0 -github.com/echovault/echovault/pkg/echovault/modules.go:54.2,55.16 2 1 -github.com/echovault/echovault/pkg/echovault/modules.go:55.16,57.3 1 0 -github.com/echovault/echovault/pkg/echovault/modules.go:59.2,63.8 4 1 -github.com/echovault/echovault/pkg/echovault/modules.go:63.8,66.3 2 0 -github.com/echovault/echovault/pkg/echovault/modules.go:68.2,68.38 1 1 -github.com/echovault/echovault/pkg/echovault/modules.go:68.38,70.87 1 0 -github.com/echovault/echovault/pkg/echovault/modules.go:70.87,72.4 1 0 -github.com/echovault/echovault/pkg/echovault/modules.go:76.2,76.50 1 1 -github.com/echovault/echovault/pkg/echovault/modules.go:76.50,77.7 1 1 -github.com/echovault/echovault/pkg/echovault/modules.go:77.7,78.42 1 1 -github.com/echovault/echovault/pkg/echovault/modules.go:78.42,80.10 2 1 -github.com/echovault/echovault/pkg/echovault/modules.go:85.2,85.43 1 1 -github.com/echovault/echovault/pkg/echovault/modules.go:85.43,87.17 2 1 -github.com/echovault/echovault/pkg/echovault/modules.go:87.17,89.4 1 1 -github.com/echovault/echovault/pkg/echovault/modules.go:91.3,91.62 1 1 -github.com/echovault/echovault/pkg/echovault/modules.go:91.62,93.4 1 1 -github.com/echovault/echovault/pkg/echovault/modules.go:95.3,97.18 2 1 -github.com/echovault/echovault/pkg/echovault/modules.go:101.2,101.32 1 0 -github.com/echovault/echovault/pkg/echovault/modules.go:101.32,104.17 3 0 -github.com/echovault/echovault/pkg/echovault/modules.go:104.17,106.4 1 0 -github.com/echovault/echovault/pkg/echovault/modules.go:107.3,107.18 1 0 -github.com/echovault/echovault/pkg/echovault/modules.go:111.2,111.34 1 0 -github.com/echovault/echovault/pkg/echovault/modules.go:111.34,114.3 2 0 -github.com/echovault/echovault/pkg/echovault/modules.go:116.2,116.72 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:33.108,34.34 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:34.34,36.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:37.2,38.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:38.9,40.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:41.2,41.67 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:41.67,43.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:44.2,44.38 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:47.106,48.19 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:48.19,50.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:52.2,53.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:53.9,55.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:57.2,59.30 3 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:59.30,60.27 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:60.27,63.9 3 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:67.2,67.16 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:67.16,69.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:72.2,76.18 3 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:76.18,78.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:78.8,80.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:81.2,81.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:81.21,83.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:84.2,84.17 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:84.17,86.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:88.2,89.29 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:89.29,91.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:94.2,95.51 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:95.51,96.22 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:96.22,98.12 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:100.3,100.49 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:102.2,102.51 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:102.51,103.22 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:103.22,105.12 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:107.3,107.49 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:111.2,112.48 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:112.48,113.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:113.21,115.12 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:117.3,117.47 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:119.2,119.48 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:119.48,120.21 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:120.21,122.12 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:124.3,124.47 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:128.2,129.79 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:129.79,130.37 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:130.37,132.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:134.2,135.30 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:135.30,136.10 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:137.100,139.53 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:140.53,142.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:143.52,145.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:150.2,152.54 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:152.54,154.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:155.2,155.54 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:155.54,157.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:159.2,161.25 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:164.102,165.18 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:165.18,167.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:169.2,173.35 3 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:173.35,174.36 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:174.36,175.48 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:175.48,177.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:178.4,178.12 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:180.3,180.50 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:180.50,181.51 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:181.51,184.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:188.2,188.19 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:188.19,191.34 3 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:191.34,194.4 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:195.3,196.28 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:196.28,198.24 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:198.24,200.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:202.3,202.26 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:205.2,205.19 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:205.19,207.46 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:207.46,208.43 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:208.43,210.38 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:210.38,212.30 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:212.30,214.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:216.5,216.28 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:221.2,221.74 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:224.102,226.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:226.9,228.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:229.2,230.33 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:230.33,232.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:233.2,234.25 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:237.106,239.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:239.9,241.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:242.2,242.45 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:242.45,244.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:245.2,245.38 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:248.108,249.18 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:249.18,251.3 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:252.2,253.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:253.9,255.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:256.2,256.53 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:256.53,258.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:259.2,259.38 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:262.106,264.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:264.9,266.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:267.2,268.74 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:271.103,272.18 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:272.18,274.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:275.2,276.9 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:276.9,278.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:279.2,281.33 3 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:281.33,284.19 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:284.19,286.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:286.9,288.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:290.3,290.22 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:290.22,292.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:294.3,294.18 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:294.18,296.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:298.3,298.43 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:298.43,299.61 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:299.61,301.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:302.4,302.58 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:302.58,304.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:307.3,307.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:307.52,308.23 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:308.23,310.13 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:312.4,312.39 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:315.3,315.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:315.52,316.23 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:316.23,318.13 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:320.4,320.39 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:323.3,323.49 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:323.49,324.22 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:324.22,326.13 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:328.4,328.37 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:331.3,331.49 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:331.49,332.22 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:332.22,334.13 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:336.4,336.37 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:339.3,339.45 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:339.45,340.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:340.52,342.13 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:344.4,344.41 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:347.3,347.45 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:347.45,348.52 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:348.52,350.5 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:353.3,353.55 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:353.55,355.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:357.3,357.55 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:357.55,359.4 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:360.3,360.54 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:363.2,364.25 2 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:367.103,368.19 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:368.19,370.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:372.2,373.9 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:373.9,375.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:377.2,381.16 4 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:381.16,383.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:385.2,385.15 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:385.15,386.35 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:386.35,388.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:391.2,395.20 3 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:395.20,396.59 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:396.59,398.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:401.2,401.37 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:401.37,402.59 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:402.59,404.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:408.2,408.29 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:408.29,412.31 3 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:412.31,413.35 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:413.35,416.43 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:416.43,418.6 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:418.11,421.6 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:422.5,422.10 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:426.3,426.17 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:426.17,428.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:431.2,431.38 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:434.103,435.18 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:435.18,437.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:439.2,440.9 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:440.9,442.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:444.2,448.16 4 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:448.16,450.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:452.2,452.15 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:452.15,453.35 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:453.35,455.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:458.2,460.20 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:460.20,463.17 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:463.17,465.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:466.3,467.17 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:467.17,469.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:472.2,472.37 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:472.37,475.17 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:475.17,477.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:478.3,479.17 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:479.17,481.4 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:484.2,485.16 2 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:485.16,487.3 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:489.2,489.38 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:492.33,500.60 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:500.60,502.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:511.60,513.5 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:522.62,524.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:533.62,535.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:544.62,546.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:555.62,557.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:566.62,568.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:577.62,579.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:588.62,590.7 1 1 -github.com/echovault/echovault/pkg/modules/acl/commands.go:602.62,604.7 1 0 -github.com/echovault/echovault/pkg/modules/acl/commands.go:613.62,615.7 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:30.105,32.16 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:32.16,34.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:36.2,39.25 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:39.25,41.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:43.2,43.38 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:43.38,45.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:47.2,47.33 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:47.33,49.17 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:49.17,51.4 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:52.3,53.59 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:53.59,55.4 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:56.3,56.59 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:59.2,59.51 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:59.51,61.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:62.2,65.9 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:65.9,67.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:69.2,70.36 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:70.36,71.42 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:71.42,72.26 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:72.26,75.5 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:76.4,76.12 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:78.3,79.13 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:81.2,81.55 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:81.55,83.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:85.2,85.51 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:88.105,90.16 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:90.16,92.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:94.2,97.33 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:97.33,99.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:101.2,101.52 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:101.52,103.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:104.2,107.9 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:107.9,109.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:111.2,114.31 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:114.31,116.19 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:116.19,118.12 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:120.3,120.34 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:120.34,122.12 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:124.3,124.31 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:124.31,126.12 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:128.3,128.35 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:128.35,131.12 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:133.3,133.32 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:136.2,136.25 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:139.111,141.16 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:141.16,143.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:145.2,148.33 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:148.33,150.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:152.2,152.52 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:152.52,154.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:155.2,158.9 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:158.9,160.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:162.2,165.31 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:165.31,167.19 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:167.19,169.12 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:171.3,171.34 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:171.34,173.12 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:175.3,175.35 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:175.35,178.12 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:180.3,180.31 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:180.31,182.12 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:184.3,184.18 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:187.2,187.25 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:190.109,192.16 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:192.16,194.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:196.2,198.33 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:198.33,200.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:202.2,202.52 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:202.52,204.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:205.2,208.9 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:208.9,210.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:212.2,213.27 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:213.27,214.32 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:214.32,216.12 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:218.3,218.33 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:218.33,221.12 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:223.3,223.29 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:223.29,225.4 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:228.2,228.25 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:231.114,233.16 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:233.16,235.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:237.2,240.19 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:240.19,242.17 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:242.17,244.4 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:245.3,245.13 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:245.13,247.4 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:248.3,248.12 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:251.2,252.19 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:252.19,253.46 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:253.46,255.4 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:255.9,257.4 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:260.2,260.33 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:260.33,262.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:264.2,264.52 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:264.52,266.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:267.2,270.9 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:270.9,272.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:275.2,275.24 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:275.24,277.17 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:277.17,279.4 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:280.3,280.34 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:280.34,282.18 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:282.18,283.36 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:283.36,285.14 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:287.5,287.37 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:287.37,290.14 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:292.5,292.33 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:292.33,294.14 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:298.3,298.26 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:302.2,303.29 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:303.29,305.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:308.2,310.46 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:310.46,314.16 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:314.16,315.59 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:315.59,317.5 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:321.2,322.16 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:322.16,324.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:325.2,325.38 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:325.38,327.17 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:327.17,328.41 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:328.41,330.13 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:332.4,332.42 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:332.42,335.13 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:337.4,337.38 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:337.38,339.13 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:344.2,344.25 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:347.108,349.16 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:349.16,351.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:353.2,355.33 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:355.33,357.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:359.2,359.52 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:359.52,361.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:362.2,365.9 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:365.9,367.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:369.2,369.55 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:372.109,374.16 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:374.16,376.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:378.2,380.33 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:380.33,382.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:384.2,384.52 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:384.52,386.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:387.2,390.9 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:390.9,392.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:394.2,395.29 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:395.29,397.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:399.2,399.25 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:402.111,404.16 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:404.16,406.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:408.2,414.47 5 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:414.47,416.17 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:416.17,418.4 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:419.3,419.21 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:420.8,422.17 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:422.17,424.4 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:425.3,425.19 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:428.2,428.33 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:428.33,429.62 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:429.62,431.4 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:432.3,434.48 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:434.48,436.57 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:436.57,438.5 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:439.4,439.96 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:440.9,442.57 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:442.57,444.5 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:445.4,445.60 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:449.2,449.52 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:449.52,451.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:452.2,455.9 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:455.9,457.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:459.2,459.24 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:459.24,461.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:463.2,463.28 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:464.10,465.69 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:466.11,468.48 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:468.48,470.4 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:470.9,472.4 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:473.15,475.48 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:475.48,477.4 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:477.9,479.4 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:482.2,482.55 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:482.55,484.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:486.2,486.40 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:486.40,488.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:490.2,491.47 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:494.111,496.16 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:496.16,498.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:500.2,502.33 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:502.33,504.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:506.2,506.52 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:506.52,508.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:509.2,512.9 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:512.9,514.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:516.2,517.33 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:517.33,519.34 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:519.34,521.4 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:522.3,522.35 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:522.35,525.4 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:526.3,526.31 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:526.31,528.4 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:531.2,531.25 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:534.111,536.16 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:536.16,538.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:540.2,543.33 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:543.33,545.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:547.2,547.52 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:547.52,549.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:550.2,553.9 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:553.9,555.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:557.2,557.24 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:557.24,559.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:561.2,561.30 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:564.108,566.16 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:566.16,568.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:570.2,573.33 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:573.33,575.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:577.2,577.51 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:577.51,579.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:580.2,583.9 3 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:583.9,585.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:587.2,589.31 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:589.31,590.25 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:590.25,593.4 2 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:596.2,596.55 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:596.55,598.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/commands.go:600.2,600.51 1 1 -github.com/echovault/echovault/pkg/modules/hash/commands.go:603.33,724.2 1 0 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:22.50,23.18 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:23.18,25.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:26.2,26.22 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:29.52,30.18 1 0 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:30.18,32.3 1 0 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:33.2,33.22 1 0 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:36.50,37.18 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:37.18,39.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:40.2,40.22 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:43.53,44.18 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:44.18,46.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:47.2,47.22 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:50.51,51.19 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:51.19,53.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:54.2,54.21 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:57.56,58.34 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:58.34,60.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:61.2,61.19 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:61.19,63.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:64.2,64.22 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:67.50,68.19 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:68.19,70.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:71.2,71.21 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:74.51,75.19 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:75.19,77.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:78.2,78.21 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:81.53,82.19 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:82.19,84.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:85.2,85.22 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:88.53,89.19 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:89.19,91.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:92.2,92.21 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:95.53,96.19 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:96.19,98.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:99.2,99.22 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:102.50,103.18 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:103.18,105.3 1 1 -github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:106.2,106.22 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:29.105,31.16 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:31.16,33.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:35.2,37.33 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:37.33,40.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:42.2,42.52 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:42.52,44.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:45.2,47.63 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:47.63,49.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:51.2,51.57 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:54.110,56.16 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:56.16,58.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:60.2,63.9 3 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:63.9,65.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:67.2,67.33 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:67.33,69.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:71.2,71.52 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:71.52,73.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:74.2,77.9 3 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:77.9,79.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:81.2,81.40 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:81.40,83.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:85.2,85.57 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:88.110,90.16 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:90.16,92.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:94.2,98.24 4 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:98.24,100.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:102.2,102.33 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:102.33,104.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:106.2,106.52 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:106.52,108.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:109.2,112.9 3 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:112.9,114.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:117.2,117.40 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:117.40,119.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:122.2,122.51 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:122.51,124.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:126.2,129.15 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:129.15,131.43 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:131.43,134.4 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:135.3,135.20 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:139.2,139.18 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:139.18,141.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:146.2,150.17 4 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:150.17,152.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:154.2,154.13 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:154.13,157.18 3 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:157.18,159.4 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:159.9,161.4 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:164.2,164.19 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:167.108,169.16 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:169.16,171.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:173.2,176.9 3 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:176.9,178.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:180.2,180.33 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:180.33,182.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:184.2,184.51 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:184.51,186.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:187.2,190.9 3 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:190.9,192.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:194.2,194.40 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:194.40,196.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:198.2,199.55 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:199.55,201.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:203.2,203.38 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:206.109,208.16 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:208.16,210.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:212.2,216.24 4 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:216.24,218.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:220.2,220.30 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:220.30,222.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:224.2,224.33 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:224.33,226.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:228.2,228.51 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:228.51,230.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:231.2,234.9 3 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:234.9,236.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:238.2,238.40 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:238.40,240.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:242.2,242.34 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:242.34,243.64 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:243.64,245.4 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:246.3,246.39 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:249.2,249.66 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:249.66,251.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:252.2,252.38 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:255.108,257.16 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:257.16,259.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:261.2,265.9 4 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:265.9,267.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:269.2,271.33 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:271.33,273.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:275.2,275.51 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:275.51,277.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:278.2,281.9 3 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:281.9,283.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:285.2,285.9 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:286.10,286.10 0 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:288.17,290.34 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:290.34,291.26 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:291.26,292.10 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:294.4,294.43 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:294.43,297.5 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:299.17,301.39 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:301.39,302.26 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:302.26,303.10 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:305.4,305.43 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:305.43,308.5 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:312.2,312.61 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:312.61,314.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:316.2,316.55 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:316.55,318.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:320.2,320.38 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:323.109,325.16 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:325.16,327.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:329.2,334.116 5 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:334.116,336.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:338.2,338.75 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:338.75,340.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:342.2,342.54 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:342.54,344.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:345.2,348.16 3 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:348.16,350.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:351.2,356.33 4 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:356.33,358.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:360.2,360.19 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:361.14,363.24 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:363.24,365.4 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:365.9,365.32 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:365.32,367.4 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:368.15,370.24 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:370.24,372.4 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:372.9,372.32 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:372.32,374.4 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:377.2,377.16 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:377.16,379.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:381.2,381.38 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:384.109,386.16 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:386.16,388.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:390.2,392.31 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:392.31,394.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:396.2,398.33 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:398.33,399.34 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:400.17,401.61 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:402.11,403.62 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:403.62,405.5 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:406.4,406.68 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:406.68,408.5 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:410.8,411.52 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:411.52,413.4 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:415.2,420.9 4 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:420.9,422.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:424.2,424.73 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:424.73,426.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:427.2,427.38 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:430.109,432.16 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:432.16,434.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:436.2,440.31 3 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:440.31,442.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:444.2,444.33 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:444.33,445.34 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:446.17,447.61 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:448.11,449.62 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:449.62,451.5 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:452.4,453.68 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:453.68,455.5 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:457.8,458.52 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:458.52,460.4 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:461.3,461.35 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:464.2,468.9 3 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:468.9,470.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:472.2,472.73 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:472.73,474.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:475.2,475.38 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:478.104,480.16 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:480.16,482.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:484.2,486.33 2 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:486.33,488.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:490.2,490.51 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:490.51,492.3 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:493.2,496.9 3 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:496.9,498.3 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:500.2,500.33 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:501.10,502.60 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:502.60,504.4 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:505.3,505.54 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:506.14,507.70 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:507.70,509.4 1 0 -github.com/echovault/echovault/pkg/modules/list/commands.go:510.3,510.64 1 1 -github.com/echovault/echovault/pkg/modules/list/commands.go:514.33,634.2 1 0 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:22.51,23.18 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:23.18,25.3 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:26.2,26.30 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:29.49,30.19 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:30.19,32.3 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:33.2,33.30 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:36.50,37.19 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:37.19,39.3 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:40.2,40.30 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:43.52,44.19 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:44.19,46.3 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:47.2,47.30 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:50.52,51.19 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:51.19,53.3 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:54.2,54.30 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:57.50,58.19 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:58.19,60.3 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:61.2,61.30 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:64.51,65.19 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:65.19,67.3 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:68.2,68.30 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:71.50,72.19 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:72.19,74.3 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:75.2,75.30 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:78.51,79.18 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:79.18,81.3 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:82.2,82.30 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:85.51,86.19 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:86.19,88.3 1 1 -github.com/echovault/echovault/pkg/modules/list/key_funcs.go:89.2,89.38 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:33.13,34.34 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:34.34,38.3 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:40.2,41.29 2 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:41.29,43.3 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:51.104,53.16 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:53.16,55.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:57.2,62.16 5 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:62.16,64.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:68.2,68.16 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:68.16,69.34 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:69.34,71.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:71.9,73.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:76.2,76.44 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:76.44,78.34 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:78.34,80.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:81.3,81.36 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:82.8,82.51 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:82.51,84.33 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:84.33,86.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:87.3,87.45 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:88.8,90.34 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:90.34,93.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:93.9,96.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:98.2,98.16 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:98.16,100.3 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:101.2,103.76 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:103.76,105.3 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:108.2,108.28 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:108.28,110.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:112.2,112.17 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:115.105,116.44 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:116.44,118.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:120.2,123.15 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:123.15,124.29 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:124.29,125.16 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:125.16,131.5 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:136.2,136.30 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:136.30,137.15 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:137.15,142.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:147.2,147.28 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:147.28,148.31 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:148.31,149.52 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:149.52,151.5 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:152.4,153.12 2 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:155.3,155.60 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:155.60,157.4 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:158.3,158.55 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:162.2,162.28 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:162.28,163.58 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:163.58,165.4 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:168.2,168.38 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:171.104,173.16 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:173.16,175.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:176.2,178.33 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:178.33,180.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:182.2,183.16 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:183.16,185.3 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:186.2,190.51 3 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:193.105,195.16 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:195.16,197.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:199.2,202.27 3 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:202.27,203.31 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:203.31,205.12 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:207.3,207.33 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:207.33,209.18 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:209.18,211.5 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:212.4,213.12 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:215.3,215.19 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:217.2,217.15 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:217.15,218.34 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:218.34,219.14 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:219.14,222.5 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:226.2,226.28 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:226.28,228.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:230.2,232.30 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:232.30,233.24 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:233.24,235.12 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:237.3,237.96 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:240.2,240.19 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:243.104,245.16 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:245.16,247.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:248.2,249.27 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:249.27,251.17 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:251.17,253.12 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:255.3,255.13 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:257.2,257.51 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:260.108,262.16 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:262.16,264.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:266.2,268.33 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:268.33,270.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:272.2,272.51 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:272.51,274.3 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:275.2,278.31 3 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:278.31,280.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:282.2,284.30 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:287.111,289.16 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:289.16,291.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:293.2,295.33 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:295.33,297.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:299.2,299.52 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:299.52,301.3 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:302.2,306.31 3 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:306.31,308.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:310.2,311.46 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:311.46,313.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:315.2,315.47 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:318.104,320.16 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:320.16,322.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:324.2,326.33 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:326.33,328.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:330.2,330.52 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:330.52,332.3 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:333.2,337.31 3 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:337.31,339.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:341.2,342.39 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:342.39,344.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:346.2,346.12 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:346.12,348.3 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:350.2,350.47 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:353.107,355.16 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:355.16,357.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:359.2,363.16 3 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:363.16,365.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:366.2,367.42 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:367.42,369.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:371.2,371.33 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:371.33,373.3 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:375.2,375.51 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:375.51,377.3 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:378.2,380.19 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:380.19,383.3 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:385.2,387.33 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:388.12,389.39 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:389.39,391.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:392.3,392.46 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:393.12,394.39 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:394.39,396.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:397.3,397.46 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:398.12,399.39 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:399.39,401.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:402.3,402.39 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:402.39,404.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:405.3,405.46 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:406.12,407.39 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:407.39,408.40 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:408.40,410.5 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:411.4,411.47 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:413.3,413.46 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:414.10,415.71 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:418.2,418.30 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:421.109,423.16 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:423.16,425.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:427.2,431.16 3 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:431.16,433.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:434.2,435.44 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:435.44,437.3 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:439.2,439.33 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:439.33,441.3 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:443.2,443.51 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:443.51,445.3 1 0 -github.com/echovault/echovault/pkg/modules/generic/commands.go:446.2,448.19 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:448.19,451.3 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:453.2,455.33 2 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:456.12,457.39 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:457.39,459.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:460.3,460.46 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:461.12,462.39 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:462.39,464.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:465.3,465.46 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:466.12,467.39 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:467.39,469.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:470.3,470.39 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:470.39,472.4 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:473.3,473.46 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:474.12,475.39 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:475.39,476.40 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:476.40,478.5 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:479.4,479.47 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:481.3,481.46 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:482.10,483.71 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:486.2,486.30 1 1 -github.com/echovault/echovault/pkg/modules/generic/commands.go:489.33,658.2 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:28.59,30.2 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:32.47,34.2 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:36.50,38.2 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:40.72,41.42 1 1 +github.com/echovault/echovault/pkg/echovault/modules.go:41.42,42.46 1 1 +github.com/echovault/echovault/pkg/echovault/modules.go:42.46,44.4 1 1 +github.com/echovault/echovault/pkg/echovault/modules.go:46.2,46.69 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:49.122,51.16 2 1 +github.com/echovault/echovault/pkg/echovault/modules.go:51.16,53.3 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:55.2,56.16 2 1 +github.com/echovault/echovault/pkg/echovault/modules.go:56.16,58.3 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:60.2,64.8 4 1 +github.com/echovault/echovault/pkg/echovault/modules.go:64.8,67.3 2 0 +github.com/echovault/echovault/pkg/echovault/modules.go:69.2,69.38 1 1 +github.com/echovault/echovault/pkg/echovault/modules.go:69.38,71.87 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:71.87,73.4 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:77.2,77.50 1 1 +github.com/echovault/echovault/pkg/echovault/modules.go:77.50,78.7 1 1 +github.com/echovault/echovault/pkg/echovault/modules.go:78.7,79.42 1 1 +github.com/echovault/echovault/pkg/echovault/modules.go:79.42,81.10 2 1 +github.com/echovault/echovault/pkg/echovault/modules.go:86.2,86.43 1 1 +github.com/echovault/echovault/pkg/echovault/modules.go:86.43,88.17 2 1 +github.com/echovault/echovault/pkg/echovault/modules.go:88.17,90.4 1 1 +github.com/echovault/echovault/pkg/echovault/modules.go:92.3,92.62 1 1 +github.com/echovault/echovault/pkg/echovault/modules.go:92.62,94.4 1 1 +github.com/echovault/echovault/pkg/echovault/modules.go:96.3,98.18 2 1 +github.com/echovault/echovault/pkg/echovault/modules.go:102.2,102.32 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:102.32,105.17 3 0 +github.com/echovault/echovault/pkg/echovault/modules.go:105.17,107.4 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:108.3,108.18 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:112.2,112.34 1 0 +github.com/echovault/echovault/pkg/echovault/modules.go:112.34,115.3 2 0 +github.com/echovault/echovault/pkg/echovault/modules.go:117.2,117.72 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:34.108,35.34 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:35.34,37.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:38.2,39.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:39.9,41.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:42.2,42.67 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:42.67,44.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:45.2,45.42 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:48.106,49.19 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:49.19,51.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:53.2,54.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:54.9,56.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:58.2,60.30 3 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:60.30,61.27 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:61.27,64.9 3 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:68.2,68.16 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:68.16,70.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:73.2,77.18 3 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:77.18,79.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:79.8,81.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:82.2,82.21 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:82.21,84.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:85.2,85.17 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:85.17,87.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:89.2,90.29 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:90.29,92.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:95.2,96.51 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:96.51,97.22 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:97.22,99.12 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:101.3,101.49 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:103.2,103.51 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:103.51,104.22 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:104.22,106.12 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:108.3,108.49 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:112.2,113.48 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:113.48,114.21 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:114.21,116.12 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:118.3,118.47 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:120.2,120.48 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:120.48,121.21 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:121.21,123.12 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:125.3,125.47 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:129.2,130.79 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:130.79,131.37 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:131.37,133.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:135.2,136.30 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:136.30,137.10 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:138.100,140.53 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:141.53,143.52 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:144.52,146.52 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:151.2,153.54 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:153.54,155.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:156.2,156.54 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:156.54,158.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:160.2,162.25 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:165.102,166.18 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:166.18,168.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:170.2,174.35 3 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:174.35,175.36 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:175.36,176.48 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:176.48,178.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:179.4,179.12 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:181.3,181.50 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:181.50,182.51 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:182.51,185.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:189.2,189.19 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:189.19,192.34 3 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:192.34,195.4 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:196.3,197.28 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:197.28,199.24 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:199.24,201.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:203.3,203.26 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:206.2,206.19 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:206.19,208.46 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:208.46,209.43 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:209.43,211.38 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:211.38,213.30 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:213.30,215.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:217.5,217.28 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:222.2,222.74 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:225.102,227.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:227.9,229.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:230.2,231.33 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:231.33,233.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:234.2,235.25 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:238.106,240.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:240.9,242.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:243.2,243.45 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:243.45,245.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:246.2,246.42 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:249.108,250.18 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:250.18,252.3 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:253.2,254.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:254.9,256.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:257.2,257.53 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:257.53,259.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:260.2,260.42 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:263.106,265.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:265.9,267.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:268.2,269.74 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:272.103,273.18 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:273.18,275.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:276.2,277.9 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:277.9,279.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:280.2,282.33 3 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:282.33,285.19 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:285.19,287.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:287.9,289.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:291.3,291.22 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:291.22,293.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:295.3,295.18 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:295.18,297.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:299.3,299.43 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:299.43,300.61 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:300.61,302.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:303.4,303.58 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:303.58,305.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:308.3,308.52 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:308.52,309.23 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:309.23,311.13 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:313.4,313.39 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:316.3,316.52 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:316.52,317.23 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:317.23,319.13 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:321.4,321.39 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:324.3,324.49 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:324.49,325.22 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:325.22,327.13 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:329.4,329.37 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:332.3,332.49 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:332.49,333.22 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:333.22,335.13 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:337.4,337.37 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:340.3,340.45 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:340.45,341.52 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:341.52,343.13 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:345.4,345.41 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:348.3,348.45 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:348.45,349.52 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:349.52,351.5 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:354.3,354.55 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:354.55,356.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:358.3,358.55 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:358.55,360.4 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:361.3,361.54 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:364.2,365.25 2 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:368.103,369.19 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:369.19,371.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:373.2,374.9 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:374.9,376.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:378.2,382.16 4 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:382.16,384.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:386.2,386.15 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:386.15,387.35 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:387.35,389.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:392.2,396.20 3 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:396.20,397.59 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:397.59,399.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:402.2,402.37 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:402.37,403.59 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:403.59,405.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:409.2,409.29 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:409.29,413.31 3 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:413.31,414.35 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:414.35,417.43 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:417.43,419.6 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:419.11,422.6 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:423.5,423.10 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:427.3,427.17 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:427.17,429.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:432.2,432.42 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:435.103,436.18 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:436.18,438.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:440.2,441.9 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:441.9,443.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:445.2,449.16 4 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:449.16,451.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:453.2,453.15 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:453.15,454.35 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:454.35,456.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:459.2,461.20 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:461.20,464.17 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:464.17,466.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:467.3,468.17 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:468.17,470.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:473.2,473.37 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:473.37,476.17 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:476.17,478.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:479.3,480.17 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:480.17,482.4 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:485.2,486.16 2 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:486.16,488.3 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:490.2,490.42 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:493.33,501.60 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:501.60,503.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:512.60,514.5 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:523.62,525.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:534.62,536.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:545.62,547.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:556.62,558.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:567.62,569.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:578.62,580.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:589.62,591.7 1 1 +github.com/echovault/echovault/pkg/modules/acl/commands.go:603.62,605.7 1 0 +github.com/echovault/echovault/pkg/modules/acl/commands.go:614.62,616.7 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:34.13,35.34 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:35.34,39.3 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:41.2,42.29 2 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:42.29,44.3 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:52.104,54.16 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:54.16,56.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:58.2,63.16 5 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:63.16,65.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:69.2,69.16 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:69.16,70.34 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:70.34,72.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:72.9,74.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:77.2,77.44 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:77.44,79.34 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:79.34,81.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:82.3,82.36 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:83.8,83.51 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:83.51,85.33 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:85.33,87.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:88.3,88.45 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:89.8,91.34 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:91.34,94.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:94.9,97.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:99.2,99.16 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:99.16,101.3 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:102.2,104.76 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:104.76,106.3 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:109.2,109.28 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:109.28,111.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:113.2,113.17 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:116.105,117.44 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:117.44,119.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:121.2,124.15 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:124.15,125.29 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:125.29,126.16 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:126.16,132.5 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:137.2,137.30 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:137.30,138.15 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:138.15,143.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:148.2,148.28 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:148.28,149.31 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:149.31,150.52 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:150.52,152.5 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:153.4,154.12 2 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:156.3,156.60 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:156.60,158.4 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:159.3,159.55 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:163.2,163.28 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:163.28,164.58 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:164.58,166.4 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:169.2,169.42 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:172.104,174.16 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:174.16,176.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:177.2,179.33 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:179.33,181.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:183.2,184.16 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:184.16,186.3 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:187.2,191.51 3 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:194.105,196.16 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:196.16,198.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:200.2,203.27 3 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:203.27,204.31 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:204.31,206.12 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:208.3,208.33 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:208.33,210.18 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:210.18,212.5 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:213.4,214.12 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:216.3,216.19 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:218.2,218.15 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:218.15,219.34 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:219.34,220.14 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:220.14,223.5 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:227.2,227.28 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:227.28,229.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:231.2,233.30 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:233.30,234.24 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:234.24,236.12 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:238.3,238.96 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:241.2,241.19 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:244.104,246.16 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:246.16,248.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:249.2,250.27 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:250.27,252.17 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:252.17,254.12 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:256.3,256.13 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:258.2,258.51 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:261.108,263.16 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:263.16,265.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:267.2,269.33 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:269.33,271.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:273.2,273.51 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:273.51,275.3 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:276.2,279.31 3 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:279.31,281.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:283.2,285.30 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:288.111,290.16 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:290.16,292.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:294.2,296.33 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:296.33,298.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:300.2,300.52 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:300.52,302.3 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:303.2,307.31 3 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:307.31,309.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:311.2,312.46 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:312.46,314.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:316.2,316.47 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:319.104,321.16 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:321.16,323.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:325.2,327.33 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:327.33,329.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:331.2,331.52 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:331.52,333.3 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:334.2,338.31 3 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:338.31,340.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:342.2,343.39 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:343.39,345.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:347.2,347.12 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:347.12,349.3 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:351.2,351.47 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:354.107,356.16 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:356.16,358.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:360.2,364.16 3 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:364.16,366.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:367.2,368.42 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:368.42,370.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:372.2,372.33 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:372.33,374.3 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:376.2,376.51 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:376.51,378.3 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:379.2,381.19 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:381.19,384.3 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:386.2,388.33 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:389.12,390.39 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:390.39,392.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:393.3,393.46 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:394.12,395.39 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:395.39,397.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:398.3,398.46 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:399.12,400.39 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:400.39,402.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:403.3,403.39 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:403.39,405.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:406.3,406.46 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:407.12,408.39 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:408.39,409.40 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:409.40,411.5 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:412.4,412.47 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:414.3,414.46 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:415.10,416.71 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:419.2,419.30 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:422.109,424.16 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:424.16,426.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:428.2,432.16 3 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:432.16,434.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:435.2,436.44 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:436.44,438.3 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:440.2,440.33 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:440.33,442.3 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:444.2,444.51 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:444.51,446.3 1 0 +github.com/echovault/echovault/pkg/modules/generic/commands.go:447.2,449.19 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:449.19,452.3 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:454.2,456.33 2 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:457.12,458.39 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:458.39,460.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:461.3,461.46 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:462.12,463.39 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:463.39,465.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:466.3,466.46 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:467.12,468.39 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:468.39,470.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:471.3,471.39 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:471.39,473.4 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:474.3,474.46 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:475.12,476.39 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:476.39,477.40 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:477.40,479.5 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:480.4,480.47 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:482.3,482.46 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:483.10,484.71 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:487.2,487.30 1 1 +github.com/echovault/echovault/pkg/modules/generic/commands.go:490.33,659.2 1 0 github.com/echovault/echovault/pkg/modules/generic/key_funcs.go:22.49,23.34 1 1 github.com/echovault/echovault/pkg/modules/generic/key_funcs.go:23.34,25.3 1 1 github.com/echovault/echovault/pkg/modules/generic/key_funcs.go:26.2,26.30 1 1 @@ -1925,353 +1360,918 @@ github.com/echovault/echovault/pkg/modules/generic/utils.go:106.3,108.17 3 1 github.com/echovault/echovault/pkg/modules/generic/utils.go:108.17,110.4 1 1 github.com/echovault/echovault/pkg/modules/generic/utils.go:111.3,112.46 2 1 github.com/echovault/echovault/pkg/modules/generic/utils.go:114.10,115.95 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:27.113,29.9 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:29.9,31.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:33.2,35.24 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:35.24,37.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:39.2,42.17 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:45.115,47.9 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:47.9,49.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:51.2,55.66 3 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:58.108,60.9 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:60.9,62.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:63.2,63.19 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:63.19,65.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:66.2,67.38 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:70.113,71.18 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:71.18,73.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:75.2,76.9 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:76.9,78.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:80.2,81.19 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:81.19,83.3 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:85.2,85.38 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:88.109,90.9 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:90.9,92.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:93.2,94.49 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:97.112,99.9 2 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:99.9,101.3 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:102.2,102.36 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:105.33,113.60 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:113.60,115.21 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:115.21,117.6 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:118.5,118.24 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:128.60,130.21 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:130.21,132.6 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:133.5,133.24 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:143.60,145.22 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:145.22,147.6 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:148.5,148.33 1 1 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:160.60,163.5 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:174.60,177.5 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:186.60,186.86 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:187.101,189.5 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:199.62,199.88 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:208.62,208.88 1 0 -github.com/echovault/echovault/pkg/modules/pubsub/commands.go:218.62,218.85 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:29.108,31.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:31.16,33.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:35.2,39.33 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:39.33,41.70 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:41.70,43.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:44.3,44.55 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:44.55,46.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:47.3,48.59 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:51.2,51.51 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:51.51,53.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:54.2,57.9 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:57.9,59.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:61.2,63.51 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:66.109,68.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:68.16,70.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:72.2,74.33 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:74.33,76.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:78.2,78.52 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:78.52,80.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:81.2,84.9 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:84.9,86.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:88.2,90.57 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:93.109,95.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:95.16,97.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:100.2,100.37 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:100.37,102.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:103.2,103.56 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:103.56,105.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:106.2,108.9 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:108.9,110.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:112.2,113.15 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:113.15,114.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:114.34,115.14 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:115.14,117.5 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:121.2,121.31 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:121.31,122.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:122.34,123.12 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:125.3,125.53 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:125.53,126.12 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:128.3,128.20 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:131.2,132.30 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:132.30,134.10 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:134.10,135.12 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:137.3,137.27 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:140.2,144.26 4 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:144.26,146.24 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:146.24,148.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:151.2,151.25 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:154.114,156.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:156.16,158.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:160.2,163.37 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:163.37,165.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:166.2,166.57 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:166.57,168.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:169.2,171.9 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:171.9,173.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:175.2,176.15 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:176.15,177.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:177.34,178.14 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:178.14,180.5 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:184.2,184.31 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:184.31,185.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:185.34,186.12 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:188.3,188.53 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:188.53,189.12 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:191.3,191.20 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:194.2,195.31 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:195.31,197.10 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:197.10,198.12 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:200.3,200.27 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:203.2,208.40 4 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:208.40,209.60 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:209.60,211.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:212.3,212.64 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:212.64,214.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:215.3,216.26 2 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:219.2,219.68 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:219.68,221.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:222.2,222.63 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:222.63,224.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:225.2,227.25 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:230.110,232.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:232.16,234.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:236.2,237.15 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:237.15,238.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:238.34,239.14 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:239.14,241.5 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:245.2,245.31 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:245.31,246.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:246.34,249.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:250.3,250.53 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:250.53,252.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:253.3,253.20 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:256.2,258.28 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:258.28,260.10 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:260.10,263.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:264.3,264.27 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:267.2,267.20 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:267.20,269.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:271.2,275.26 4 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:275.26,277.24 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:277.24,279.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:282.2,282.25 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:285.114,287.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:287.16,289.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:292.2,293.56 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:293.56,295.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:296.2,296.35 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:296.35,298.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:299.2,299.20 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:299.20,301.27 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:301.27,303.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:305.3,305.60 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:305.60,307.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:307.9,309.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:312.2,313.15 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:313.15,314.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:314.34,315.14 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:315.14,317.5 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:321.2,321.27 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:321.27,322.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:322.34,325.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:326.3,326.53 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:326.53,328.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:329.3,329.20 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:332.2,334.28 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:334.28,336.10 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:336.10,339.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:340.3,340.27 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:343.2,343.20 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:343.20,345.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:347.2,349.69 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:352.115,354.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:354.16,356.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:358.2,359.15 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:359.15,360.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:360.34,361.14 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:361.14,363.5 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:367.2,367.31 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:367.31,368.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:368.34,371.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:372.3,372.53 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:372.53,374.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:375.3,375.20 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:378.2,380.28 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:380.28,382.10 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:382.10,385.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:386.3,386.27 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:389.2,392.40 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:392.40,393.60 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:393.60,395.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:396.8,397.69 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:397.69,399.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:402.2,402.68 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:402.68,404.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:405.2,407.69 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:410.113,412.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:412.16,414.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:416.2,418.33 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:418.33,420.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:422.2,422.52 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:422.52,424.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:425.2,428.9 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:428.9,430.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:432.2,432.27 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:432.27,434.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:436.2,436.30 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:439.112,441.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:441.16,443.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:445.2,447.33 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:447.33,449.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:451.2,451.52 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:451.52,453.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:454.2,457.9 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:457.9,459.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:461.2,464.26 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:464.26,466.24 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:466.24,468.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:471.2,471.25 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:474.114,476.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:476.16,478.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:480.2,483.33 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:483.33,485.29 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:485.29,487.27 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:487.27,489.5 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:491.3,491.26 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:494.2,494.52 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:494.52,496.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:497.2,500.9 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:500.9,502.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:504.2,505.36 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:505.36,506.31 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:506.31,508.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:508.9,510.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:512.2,514.25 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:517.109,519.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:519.16,521.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:523.2,527.36 4 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:527.36,529.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:531.2,531.54 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:531.54,533.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:534.2,537.9 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:537.9,539.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:541.2,543.41 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:543.41,545.69 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:545.69,547.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:548.3,550.74 3 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:550.74,552.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:553.8,555.61 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:555.61,557.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:558.3,560.10 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:560.10,562.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:563.3,563.22 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:566.2,568.49 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:571.108,573.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:573.16,575.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:577.2,580.19 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:580.19,582.10 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:582.10,584.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:585.3,585.12 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:588.2,588.33 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:588.33,590.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:592.2,592.51 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:592.51,594.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:595.2,598.9 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:598.9,600.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:602.2,605.28 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:605.28,607.26 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:607.26,609.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:612.2,612.25 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:615.115,617.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:617.16,619.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:621.2,624.19 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:624.19,626.10 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:626.10,628.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:629.3,629.12 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:632.2,632.33 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:632.33,634.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:636.2,636.51 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:636.51,638.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:639.2,642.9 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:642.9,644.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:646.2,649.28 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:649.28,651.26 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:651.26,653.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:656.2,656.25 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:659.108,661.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:661.16,663.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:665.2,668.33 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:668.33,670.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:672.2,672.51 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:672.51,674.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:675.2,678.9 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:678.9,680.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:682.2,684.51 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:687.110,689.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:689.16,691.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:693.2,694.15 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:694.15,695.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:695.34,696.14 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:696.14,698.5 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:702.2,702.27 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:702.27,703.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:703.34,704.12 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:706.3,706.53 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:706.53,708.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:709.3,709.20 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:712.2,714.33 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:714.33,715.14 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:715.14,716.12 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:718.3,719.10 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:719.10,721.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:722.3,722.27 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:725.2,728.35 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:728.35,730.33 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:730.33,732.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:735.2,735.25 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:738.115,740.16 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:740.16,742.3 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:744.2,745.15 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:745.15,746.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:746.34,747.14 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:747.14,749.5 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:753.2,753.31 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:753.31,754.34 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:754.34,755.12 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:757.3,757.53 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:757.53,759.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:760.3,760.20 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:763.2,765.33 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:765.33,766.14 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:766.14,767.12 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:769.3,770.10 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:770.10,772.4 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:773.3,773.27 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:776.2,780.40 3 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:780.40,781.60 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:781.60,783.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:784.8,785.69 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:785.69,787.4 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:789.2,791.64 2 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:791.64,793.3 1 0 -github.com/echovault/echovault/pkg/modules/set/commands.go:794.2,794.65 1 1 -github.com/echovault/echovault/pkg/modules/set/commands.go:797.33,948.2 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:29.115,35.29 4 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:35.29,36.54 1 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:36.54,42.42 4 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:42.42,44.5 1 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:46.4,49.12 3 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:52.3,52.36 1 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:52.36,59.43 5 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:59.43,61.5 1 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:63.4,65.21 2 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:69.2,71.25 2 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:74.109,78.35 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:78.35,79.65 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:79.65,80.41 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:80.41,82.5 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:83.4,83.12 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:85.3,85.13 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:88.2,88.51 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:91.110,92.18 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:93.9,98.36 4 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:98.36,99.66 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:99.66,100.52 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:100.52,104.6 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:105.5,105.13 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:107.4,108.14 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:110.3,111.26 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:113.9,117.45 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:117.45,119.4 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:120.3,120.42 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:120.42,124.37 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:124.37,125.67 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:125.67,126.53 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:126.53,127.59 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:127.59,131.8 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:133.6,133.14 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:135.5,135.54 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:135.54,138.6 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:140.9,140.50 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:140.50,144.37 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:144.37,145.67 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:145.67,146.53 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:146.53,148.24 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:148.24,151.8 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:153.6,153.14 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:155.5,155.33 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:155.33,158.6 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:160.9,160.49 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:160.49,164.37 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:164.37,165.67 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:165.67,166.53 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:166.53,167.55 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:167.55,171.8 3 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:173.6,173.14 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:175.5,175.50 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:175.50,178.6 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:180.9,182.4 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:183.3,184.26 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:185.10,186.54 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:190.103,192.2 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:194.33,202.60 1 1 +github.com/echovault/echovault/pkg/modules/admin/commands.go:202.60,202.86 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:211.60,213.5 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:221.62,221.88 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:230.62,230.88 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:240.62,240.88 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:251.60,253.5 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:254.113,255.49 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:255.49,257.6 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:258.5,258.45 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:267.60,269.5 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:270.113,272.18 2 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:272.18,274.6 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:275.5,275.53 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:284.60,286.5 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:287.113,288.47 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:288.47,290.6 1 0 +github.com/echovault/echovault/pkg/modules/admin/commands.go:291.5,291.45 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:31.105,33.16 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:33.16,35.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:37.2,40.25 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:40.25,42.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:44.2,44.38 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:44.38,46.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:48.2,48.33 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:48.33,50.17 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:50.17,52.4 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:53.3,54.59 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:54.59,56.4 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:57.3,57.59 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:60.2,60.51 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:60.51,62.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:63.2,66.9 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:66.9,68.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:70.2,71.36 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:71.36,72.42 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:72.42,73.26 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:73.26,76.5 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:77.4,77.12 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:79.3,80.13 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:82.2,82.55 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:82.55,84.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:86.2,86.51 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:89.105,91.16 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:91.16,93.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:95.2,98.33 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:98.33,100.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:102.2,102.52 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:102.52,104.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:105.2,108.9 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:108.9,110.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:112.2,115.31 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:115.31,117.19 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:117.19,119.12 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:121.3,121.34 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:121.34,123.12 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:125.3,125.31 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:125.31,127.12 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:129.3,129.35 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:129.35,132.12 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:134.3,134.32 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:137.2,137.25 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:140.111,142.16 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:142.16,144.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:146.2,149.33 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:149.33,151.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:153.2,153.52 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:153.52,155.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:156.2,159.9 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:159.9,161.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:163.2,166.31 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:166.31,168.19 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:168.19,170.12 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:172.3,172.34 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:172.34,174.12 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:176.3,176.35 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:176.35,179.12 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:181.3,181.31 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:181.31,183.12 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:185.3,185.18 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:188.2,188.25 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:191.109,193.16 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:193.16,195.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:197.2,199.33 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:199.33,201.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:203.2,203.52 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:203.52,205.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:206.2,209.9 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:209.9,211.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:213.2,214.27 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:214.27,215.32 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:215.32,217.12 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:219.3,219.33 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:219.33,222.12 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:224.3,224.29 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:224.29,226.4 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:229.2,229.25 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:232.114,234.16 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:234.16,236.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:238.2,241.19 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:241.19,243.17 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:243.17,245.4 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:246.3,246.13 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:246.13,248.4 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:249.3,249.12 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:252.2,253.19 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:253.19,254.46 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:254.46,256.4 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:256.9,258.4 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:261.2,261.33 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:261.33,263.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:265.2,265.52 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:265.52,267.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:268.2,271.9 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:271.9,273.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:276.2,276.24 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:276.24,278.17 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:278.17,280.4 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:281.3,281.34 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:281.34,283.18 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:283.18,284.36 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:284.36,286.14 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:288.5,288.37 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:288.37,291.14 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:293.5,293.33 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:293.33,295.14 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:299.3,299.26 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:303.2,304.29 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:304.29,306.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:309.2,311.46 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:311.46,315.16 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:315.16,316.59 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:316.59,318.5 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:322.2,323.16 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:323.16,325.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:326.2,326.38 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:326.38,328.17 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:328.17,329.41 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:329.41,331.13 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:333.4,333.42 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:333.42,336.13 3 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:338.4,338.38 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:338.38,340.13 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:345.2,345.25 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:348.108,350.16 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:350.16,352.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:354.2,356.33 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:356.33,358.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:360.2,360.52 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:360.52,362.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:363.2,366.9 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:366.9,368.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:370.2,370.55 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:373.109,375.16 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:375.16,377.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:379.2,381.33 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:381.33,383.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:385.2,385.52 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:385.52,387.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:388.2,391.9 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:391.9,393.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:395.2,396.29 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:396.29,398.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:400.2,400.25 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:403.111,405.16 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:405.16,407.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:409.2,415.47 5 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:415.47,417.17 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:417.17,419.4 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:420.3,420.21 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:421.8,423.17 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:423.17,425.4 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:426.3,426.19 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:429.2,429.33 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:429.33,430.62 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:430.62,432.4 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:433.3,435.48 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:435.48,437.57 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:437.57,439.5 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:440.4,440.96 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:441.9,443.57 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:443.57,445.5 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:446.4,446.60 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:450.2,450.52 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:450.52,452.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:453.2,456.9 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:456.9,458.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:460.2,460.24 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:460.24,462.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:464.2,464.28 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:465.10,466.69 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:467.11,469.48 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:469.48,471.4 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:471.9,473.4 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:474.15,476.48 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:476.48,478.4 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:478.9,480.4 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:483.2,483.55 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:483.55,485.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:487.2,487.40 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:487.40,489.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:491.2,492.47 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:495.111,497.16 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:497.16,499.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:501.2,503.33 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:503.33,505.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:507.2,507.52 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:507.52,509.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:510.2,513.9 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:513.9,515.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:517.2,518.33 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:518.33,520.34 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:520.34,522.4 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:523.3,523.35 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:523.35,526.4 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:527.3,527.31 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:527.31,529.4 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:532.2,532.25 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:535.111,537.16 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:537.16,539.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:541.2,544.33 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:544.33,546.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:548.2,548.52 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:548.52,550.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:551.2,554.9 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:554.9,556.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:558.2,558.24 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:558.24,560.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:562.2,562.30 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:565.108,567.16 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:567.16,569.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:571.2,574.33 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:574.33,576.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:578.2,578.51 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:578.51,580.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:581.2,584.9 3 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:584.9,586.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:588.2,590.31 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:590.31,591.25 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:591.25,594.4 2 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:597.2,597.55 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:597.55,599.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/commands.go:601.2,601.51 1 1 +github.com/echovault/echovault/pkg/modules/hash/commands.go:604.33,725.2 1 0 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:22.50,23.18 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:23.18,25.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:26.2,26.22 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:29.52,30.18 1 0 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:30.18,32.3 1 0 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:33.2,33.22 1 0 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:36.50,37.18 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:37.18,39.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:40.2,40.22 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:43.53,44.18 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:44.18,46.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:47.2,47.22 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:50.51,51.19 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:51.19,53.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:54.2,54.21 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:57.56,58.34 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:58.34,60.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:61.2,61.19 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:61.19,63.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:64.2,64.22 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:67.50,68.19 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:68.19,70.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:71.2,71.21 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:74.51,75.19 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:75.19,77.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:78.2,78.21 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:81.53,82.19 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:82.19,84.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:85.2,85.22 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:88.53,89.19 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:89.19,91.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:92.2,92.21 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:95.53,96.19 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:96.19,98.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:99.2,99.22 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:102.50,103.18 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:103.18,105.3 1 1 +github.com/echovault/echovault/pkg/modules/hash/key_funcs.go:106.2,106.22 1 1 +github.com/echovault/echovault/pkg/modules/connection/commands.go:26.108,27.18 1 1 +github.com/echovault/echovault/pkg/modules/connection/commands.go:28.10,29.54 1 1 +github.com/echovault/echovault/pkg/modules/connection/commands.go:30.9,31.34 1 1 +github.com/echovault/echovault/pkg/modules/connection/commands.go:32.9,33.72 1 1 +github.com/echovault/echovault/pkg/modules/connection/commands.go:37.33,45.60 1 0 +github.com/echovault/echovault/pkg/modules/connection/commands.go:45.60,47.5 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:30.105,32.16 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:32.16,34.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:36.2,38.33 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:38.33,41.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:43.2,43.52 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:43.52,45.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:46.2,48.63 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:48.63,50.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:52.2,52.57 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:55.110,57.16 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:57.16,59.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:61.2,64.9 3 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:64.9,66.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:68.2,68.33 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:68.33,70.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:72.2,72.52 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:72.52,74.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:75.2,78.9 3 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:78.9,80.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:82.2,82.40 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:82.40,84.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:86.2,86.57 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:89.110,91.16 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:91.16,93.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:95.2,99.24 4 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:99.24,101.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:103.2,103.33 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:103.33,105.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:107.2,107.52 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:107.52,109.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:110.2,113.9 3 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:113.9,115.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:118.2,118.40 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:118.40,120.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:123.2,123.51 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:123.51,125.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:127.2,130.15 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:130.15,132.43 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:132.43,135.4 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:136.3,136.20 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:140.2,140.18 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:140.18,142.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:147.2,151.17 4 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:151.17,153.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:155.2,155.13 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:155.13,158.18 3 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:158.18,160.4 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:160.9,162.4 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:165.2,165.19 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:168.108,170.16 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:170.16,172.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:174.2,177.9 3 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:177.9,179.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:181.2,181.33 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:181.33,183.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:185.2,185.51 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:185.51,187.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:188.2,191.9 3 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:191.9,193.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:195.2,195.40 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:195.40,197.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:199.2,200.55 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:200.55,202.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:204.2,204.42 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:207.109,209.16 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:209.16,211.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:213.2,217.24 4 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:217.24,219.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:221.2,221.30 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:221.30,223.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:225.2,225.33 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:225.33,227.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:229.2,229.51 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:229.51,231.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:232.2,235.9 3 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:235.9,237.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:239.2,239.40 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:239.40,241.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:243.2,243.34 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:243.34,244.64 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:244.64,246.4 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:247.3,247.43 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:250.2,250.66 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:250.66,252.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:253.2,253.42 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:256.108,258.16 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:258.16,260.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:262.2,266.9 4 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:266.9,268.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:270.2,272.33 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:272.33,274.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:276.2,276.51 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:276.51,278.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:279.2,282.9 3 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:282.9,284.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:286.2,286.9 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:287.10,287.10 0 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:289.17,291.34 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:291.34,292.26 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:292.26,293.10 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:295.4,295.43 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:295.43,298.5 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:300.17,302.39 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:302.39,303.26 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:303.26,304.10 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:306.4,306.43 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:306.43,309.5 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:313.2,313.61 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:313.61,315.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:317.2,317.55 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:317.55,319.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:321.2,321.42 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:324.109,326.16 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:326.16,328.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:330.2,335.116 5 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:335.116,337.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:339.2,339.75 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:339.75,341.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:343.2,343.54 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:343.54,345.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:346.2,349.16 3 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:349.16,351.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:352.2,357.33 4 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:357.33,359.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:361.2,361.19 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:362.14,364.24 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:364.24,366.4 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:366.9,366.32 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:366.32,368.4 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:369.15,371.24 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:371.24,373.4 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:373.9,373.32 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:373.32,375.4 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:378.2,378.16 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:378.16,380.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:382.2,382.42 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:385.109,387.16 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:387.16,389.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:391.2,393.31 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:393.31,395.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:397.2,399.33 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:399.33,400.34 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:401.17,402.61 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:403.11,404.62 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:404.62,406.5 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:407.4,407.68 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:407.68,409.5 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:411.8,412.52 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:412.52,414.4 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:416.2,421.9 4 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:421.9,423.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:425.2,425.73 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:425.73,427.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:428.2,428.42 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:431.109,433.16 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:433.16,435.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:437.2,441.31 3 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:441.31,443.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:445.2,445.33 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:445.33,446.34 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:447.17,448.61 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:449.11,450.62 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:450.62,452.5 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:453.4,454.68 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:454.68,456.5 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:458.8,459.52 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:459.52,461.4 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:462.3,462.35 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:465.2,469.9 3 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:469.9,471.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:473.2,473.73 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:473.73,475.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:476.2,476.42 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:479.104,481.16 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:481.16,483.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:485.2,487.33 2 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:487.33,489.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:491.2,491.51 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:491.51,493.3 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:494.2,497.9 3 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:497.9,499.3 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:501.2,501.33 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:502.10,503.60 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:503.60,505.4 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:506.3,506.54 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:507.14,508.70 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:508.70,510.4 1 0 +github.com/echovault/echovault/pkg/modules/list/commands.go:511.3,511.64 1 1 +github.com/echovault/echovault/pkg/modules/list/commands.go:515.33,635.2 1 0 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:22.51,23.18 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:23.18,25.3 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:26.2,26.30 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:29.49,30.19 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:30.19,32.3 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:33.2,33.30 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:36.50,37.19 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:37.19,39.3 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:40.2,40.30 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:43.52,44.19 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:44.19,46.3 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:47.2,47.30 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:50.52,51.19 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:51.19,53.3 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:54.2,54.30 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:57.50,58.19 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:58.19,60.3 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:61.2,61.30 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:64.51,65.19 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:65.19,67.3 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:68.2,68.30 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:71.50,72.19 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:72.19,74.3 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:75.2,75.30 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:78.51,79.18 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:79.18,81.3 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:82.2,82.30 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:85.51,86.19 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:86.19,88.3 1 1 +github.com/echovault/echovault/pkg/modules/list/key_funcs.go:89.2,89.38 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:28.113,30.9 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:30.9,32.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:34.2,36.24 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:36.24,38.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:40.2,43.17 3 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:46.115,48.9 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:48.9,50.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:52.2,56.66 3 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:59.108,61.9 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:61.9,63.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:64.2,64.19 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:64.19,66.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:67.2,68.42 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:71.113,72.18 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:72.18,74.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:76.2,77.9 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:77.9,79.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:81.2,82.19 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:82.19,84.3 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:86.2,86.38 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:89.109,91.9 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:91.9,93.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:94.2,95.49 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:98.112,100.9 2 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:100.9,102.3 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:103.2,103.36 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:106.33,114.60 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:114.60,116.21 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:116.21,118.6 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:119.5,119.24 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:129.60,131.21 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:131.21,133.6 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:134.5,134.24 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:144.60,146.22 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:146.22,148.6 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:149.5,149.33 1 1 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:161.60,164.5 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:175.60,178.5 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:187.60,187.86 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:188.101,190.5 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:200.62,200.88 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:209.62,209.88 1 0 +github.com/echovault/echovault/pkg/modules/pubsub/commands.go:219.62,219.85 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:30.108,32.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:32.16,34.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:36.2,40.33 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:40.33,42.70 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:42.70,44.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:45.3,45.55 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:45.55,47.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:48.3,49.59 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:52.2,52.51 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:52.51,54.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:55.2,58.9 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:58.9,60.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:62.2,64.51 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:67.109,69.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:69.16,71.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:73.2,75.33 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:75.33,77.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:79.2,79.52 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:79.52,81.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:82.2,85.9 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:85.9,87.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:89.2,91.57 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:94.109,96.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:96.16,98.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:101.2,101.37 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:101.37,103.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:104.2,104.56 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:104.56,106.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:107.2,109.9 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:109.9,111.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:113.2,114.15 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:114.15,115.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:115.34,116.14 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:116.14,118.5 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:122.2,122.31 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:122.31,123.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:123.34,124.12 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:126.3,126.53 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:126.53,127.12 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:129.3,129.20 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:132.2,133.30 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:133.30,135.10 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:135.10,136.12 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:138.3,138.27 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:141.2,145.26 4 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:145.26,147.24 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:147.24,149.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:152.2,152.25 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:155.114,157.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:157.16,159.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:161.2,164.37 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:164.37,166.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:167.2,167.57 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:167.57,169.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:170.2,172.9 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:172.9,174.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:176.2,177.15 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:177.15,178.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:178.34,179.14 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:179.14,181.5 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:185.2,185.31 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:185.31,186.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:186.34,187.12 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:189.3,189.53 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:189.53,190.12 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:192.3,192.20 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:195.2,196.31 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:196.31,198.10 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:198.10,199.12 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:201.3,201.27 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:204.2,209.40 4 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:209.40,210.60 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:210.60,212.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:213.3,213.64 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:213.64,215.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:216.3,217.26 2 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:220.2,220.68 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:220.68,222.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:223.2,223.63 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:223.63,225.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:226.2,228.25 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:231.110,233.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:233.16,235.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:237.2,238.15 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:238.15,239.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:239.34,240.14 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:240.14,242.5 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:246.2,246.31 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:246.31,247.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:247.34,250.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:251.3,251.53 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:251.53,253.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:254.3,254.20 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:257.2,259.28 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:259.28,261.10 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:261.10,264.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:265.3,265.27 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:268.2,268.20 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:268.20,270.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:272.2,276.26 4 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:276.26,278.24 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:278.24,280.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:283.2,283.25 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:286.114,288.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:288.16,290.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:293.2,294.56 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:294.56,296.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:297.2,297.35 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:297.35,299.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:300.2,300.20 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:300.20,302.27 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:302.27,304.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:306.3,306.60 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:306.60,308.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:308.9,310.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:313.2,314.15 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:314.15,315.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:315.34,316.14 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:316.14,318.5 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:322.2,322.27 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:322.27,323.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:323.34,326.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:327.3,327.53 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:327.53,329.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:330.3,330.20 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:333.2,335.28 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:335.28,337.10 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:337.10,340.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:341.3,341.27 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:344.2,344.20 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:344.20,346.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:348.2,350.69 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:353.115,355.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:355.16,357.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:359.2,360.15 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:360.15,361.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:361.34,362.14 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:362.14,364.5 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:368.2,368.31 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:368.31,369.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:369.34,372.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:373.3,373.53 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:373.53,375.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:376.3,376.20 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:379.2,381.28 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:381.28,383.10 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:383.10,386.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:387.3,387.27 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:390.2,393.40 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:393.40,394.60 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:394.60,396.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:397.8,398.69 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:398.69,400.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:403.2,403.68 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:403.68,405.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:406.2,408.69 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:411.113,413.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:413.16,415.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:417.2,419.33 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:419.33,421.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:423.2,423.52 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:423.52,425.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:426.2,429.9 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:429.9,431.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:433.2,433.27 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:433.27,435.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:437.2,437.30 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:440.112,442.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:442.16,444.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:446.2,448.33 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:448.33,450.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:452.2,452.52 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:452.52,454.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:455.2,458.9 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:458.9,460.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:462.2,465.26 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:465.26,467.24 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:467.24,469.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:472.2,472.25 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:475.114,477.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:477.16,479.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:481.2,484.33 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:484.33,486.29 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:486.29,488.27 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:488.27,490.5 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:492.3,492.26 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:495.2,495.52 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:495.52,497.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:498.2,501.9 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:501.9,503.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:505.2,506.36 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:506.36,507.31 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:507.31,509.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:509.9,511.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:513.2,515.25 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:518.109,520.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:520.16,522.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:524.2,528.36 4 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:528.36,530.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:532.2,532.54 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:532.54,534.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:535.2,538.9 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:538.9,540.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:542.2,544.41 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:544.41,546.69 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:546.69,548.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:549.3,551.74 3 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:551.74,553.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:554.8,556.61 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:556.61,558.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:559.3,561.10 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:561.10,563.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:564.3,564.22 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:567.2,569.49 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:572.108,574.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:574.16,576.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:578.2,581.19 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:581.19,583.10 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:583.10,585.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:586.3,586.12 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:589.2,589.33 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:589.33,591.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:593.2,593.51 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:593.51,595.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:596.2,599.9 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:599.9,601.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:603.2,606.28 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:606.28,608.26 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:608.26,610.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:613.2,613.25 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:616.115,618.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:618.16,620.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:622.2,625.19 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:625.19,627.10 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:627.10,629.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:630.3,630.12 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:633.2,633.33 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:633.33,635.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:637.2,637.51 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:637.51,639.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:640.2,643.9 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:643.9,645.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:647.2,650.28 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:650.28,652.26 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:652.26,654.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:657.2,657.25 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:660.108,662.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:662.16,664.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:666.2,669.33 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:669.33,671.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:673.2,673.51 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:673.51,675.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:676.2,679.9 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:679.9,681.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:683.2,685.51 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:688.110,690.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:690.16,692.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:694.2,695.15 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:695.15,696.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:696.34,697.14 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:697.14,699.5 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:703.2,703.27 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:703.27,704.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:704.34,705.12 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:707.3,707.53 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:707.53,709.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:710.3,710.20 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:713.2,715.33 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:715.33,716.14 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:716.14,717.12 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:719.3,720.10 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:720.10,722.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:723.3,723.27 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:726.2,729.35 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:729.35,731.33 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:731.33,733.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:736.2,736.25 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:739.115,741.16 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:741.16,743.3 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:745.2,746.15 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:746.15,747.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:747.34,748.14 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:748.14,750.5 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:754.2,754.31 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:754.31,755.34 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:755.34,756.12 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:758.3,758.53 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:758.53,760.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:761.3,761.20 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:764.2,766.33 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:766.33,767.14 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:767.14,768.12 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:770.3,771.10 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:771.10,773.4 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:774.3,774.27 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:777.2,781.40 3 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:781.40,782.60 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:782.60,784.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:785.8,786.69 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:786.69,788.4 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:790.2,792.64 2 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:792.64,794.3 1 0 +github.com/echovault/echovault/pkg/modules/set/commands.go:795.2,795.65 1 1 +github.com/echovault/echovault/pkg/modules/set/commands.go:798.33,949.2 1 0 github.com/echovault/echovault/pkg/modules/set/key_funcs.go:24.50,25.18 1 1 github.com/echovault/echovault/pkg/modules/set/key_funcs.go:25.18,27.3 1 1 github.com/echovault/echovault/pkg/modules/set/key_funcs.go:28.2,28.30 1 1 @@ -2324,596 +2324,596 @@ github.com/echovault/echovault/pkg/modules/set/key_funcs.go:135.2,135.21 1 1 github.com/echovault/echovault/pkg/modules/set/key_funcs.go:138.57,139.18 1 1 github.com/echovault/echovault/pkg/modules/set/key_funcs.go:139.18,141.3 1 1 github.com/echovault/echovault/pkg/modules/set/key_funcs.go:142.2,142.21 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:32.108,34.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:34.16,36.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:38.2,47.32 7 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:47.32,48.29 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:48.29,49.9 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:51.3,51.44 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:52.15,53.74 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:53.74,55.5 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:56.16,57.25 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:58.12,59.25 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:63.2,63.66 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:63.66,65.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:67.2,69.52 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:69.52,70.15 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:70.15,71.12 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:73.3,74.23 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:75.11,76.64 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:77.15,79.49 2 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:79.49,85.5 2 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:86.4,86.49 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:86.49,92.5 2 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:93.16,98.6 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:99.12,104.6 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:109.2,109.27 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:109.27,111.34 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:111.34,112.70 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:112.70,115.61 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:115.61,117.6 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:118.5,118.13 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:120.4,120.70 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:120.70,124.36 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:124.36,126.6 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:127.5,127.13 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:129.4,129.39 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:129.39,131.13 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:133.4,133.41 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:133.41,136.25 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:136.25,138.6 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:139.5,139.13 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:141.4,141.55 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:145.2,145.32 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:145.32,148.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:148.17,150.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:151.3,153.10 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:153.10,155.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:156.3,157.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:157.17,159.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:161.3,161.18 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:161.18,164.4 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:166.3,166.52 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:170.2,170.60 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:170.60,172.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:173.2,176.54 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:176.54,178.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:180.2,180.63 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:183.109,185.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:185.16,187.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:188.2,190.33 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:190.33,192.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:194.2,194.52 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:194.52,196.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:197.2,200.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:200.9,202.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:204.2,204.63 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:207.110,209.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:209.16,211.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:213.2,216.43 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:217.10,218.60 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:219.14,220.40 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:220.40,222.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:222.9,224.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:225.15,227.32 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:228.11,230.32 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:233.2,234.43 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:235.10,236.60 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:237.14,238.40 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:238.40,240.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:240.9,242.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:243.15,245.32 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:246.11,248.32 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:251.2,251.33 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:251.33,253.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:255.2,255.52 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:255.52,257.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:258.2,261.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:261.9,263.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:265.2,266.33 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:266.33,267.47 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:267.47,269.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:272.2,272.58 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:275.110,277.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:277.16,279.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:281.2,285.33 4 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:285.33,287.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:289.2,289.52 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:289.52,291.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:292.2,295.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:295.9,297.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:299.2,302.38 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:302.38,303.45 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:303.45,305.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:308.2,310.28 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:310.28,312.81 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:312.81,314.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:317.2,317.51 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:320.109,322.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:322.16,324.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:326.2,326.63 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:326.63,328.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:329.2,329.49 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:329.49,331.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:333.2,334.15 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:334.15,335.34 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:335.34,336.14 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:336.14,338.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:343.2,343.37 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:343.37,346.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:347.2,347.56 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:347.56,349.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:350.2,352.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:352.9,354.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:357.2,359.33 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:359.33,360.38 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:360.38,361.12 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:363.3,364.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:364.17,366.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:367.3,369.10 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:369.10,371.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:372.3,372.27 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:375.2,380.34 4 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:380.34,381.20 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:381.20,383.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:383.9,385.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:388.2,390.25 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:393.114,395.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:395.16,397.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:399.2,402.15 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:402.15,403.34 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:403.34,404.14 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:404.14,406.5 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:411.2,411.37 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:411.37,414.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:415.2,415.56 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:415.56,417.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:418.2,420.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:420.9,422.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:424.2,426.33 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:426.33,427.37 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:427.37,428.58 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:428.58,430.5 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:431.4,432.11 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:432.11,434.5 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:435.4,435.28 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:439.2,441.40 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:441.40,442.60 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:442.60,444.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:445.8,446.69 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:446.69,448.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:450.2,452.63 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:452.63,454.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:456.2,456.64 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:459.111,461.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:461.16,463.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:465.2,469.43 4 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:470.10,471.55 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:472.14,473.57 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:473.57,475.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:475.9,475.64 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:475.64,477.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:477.9,479.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:480.15,482.34 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:483.11,485.34 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:488.2,488.33 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:488.33,491.61 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:491.61,493.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:494.3,498.17 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:498.17,500.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:501.3,502.99 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:505.2,505.51 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:505.51,507.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:508.2,510.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:510.9,512.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:513.2,519.23 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:519.23,521.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:522.2,523.74 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:526.110,528.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:528.16,530.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:532.2,533.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:533.16,535.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:537.2,538.15 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:538.15,539.34 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:539.34,540.14 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:540.14,542.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:546.2,548.33 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:548.33,549.38 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:549.38,552.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:553.3,553.57 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:553.57,555.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:556.3,558.10 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:558.10,560.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:561.3,564.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:567.2,571.33 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:571.33,572.40 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:572.40,573.18 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:573.18,575.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:575.10,577.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:581.2,583.25 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:586.115,588.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:588.16,590.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:592.2,595.51 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:595.51,597.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:599.2,600.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:600.16,602.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:604.2,605.15 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:605.15,606.34 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:606.34,607.14 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:607.14,609.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:613.2,615.33 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:615.33,616.38 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:616.38,618.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:619.3,619.57 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:619.57,621.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:622.3,624.10 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:624.10,626.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:627.3,630.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:633.2,635.71 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:635.71,636.60 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:636.60,638.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:639.8,639.40 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:639.40,640.69 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:640.69,642.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:644.2,646.68 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:646.68,648.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:650.2,650.69 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:653.109,655.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:655.16,657.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:659.2,664.56 4 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:664.56,666.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:667.2,667.20 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:667.20,668.19 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:668.19,670.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:671.3,671.29 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:671.29,673.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:674.3,675.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:675.17,677.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:678.3,678.13 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:678.13,680.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:681.3,682.25 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:686.2,686.57 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:686.57,688.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:689.2,689.21 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:689.21,690.20 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:690.20,692.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:693.3,694.53 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:694.53,696.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:699.2,699.33 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:699.33,700.37 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:700.37,701.57 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:701.57,702.13 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:704.4,705.35 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:705.35,707.13 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:709.4,710.18 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:710.18,713.5 2 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:714.4,718.38 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:718.38,720.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:722.4,724.27 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:728.2,728.30 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:731.108,733.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:733.16,735.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:737.2,741.42 4 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:741.42,743.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:745.2,745.19 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:745.19,747.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:747.17,749.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:750.3,750.12 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:753.2,753.33 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:753.33,755.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:757.2,757.51 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:757.51,759.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:760.2,763.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:763.9,765.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:767.2,768.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:768.16,770.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:772.2,773.36 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:773.36,775.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:777.2,779.25 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:782.111,784.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:784.16,786.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:788.2,790.33 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:790.33,792.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:794.2,794.52 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:794.52,796.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:797.2,800.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:800.9,802.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:804.2,810.36 4 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:810.36,812.21 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:812.21,814.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:814.9,816.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:819.2,821.25 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:824.115,826.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:826.16,828.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:830.2,833.19 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:833.19,835.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:835.17,837.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:840.2,841.19 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:841.19,842.46 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:842.46,844.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:844.9,846.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:849.2,849.33 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:849.33,851.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:853.2,853.52 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:853.52,855.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:856.2,859.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:859.9,861.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:863.2,866.28 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:866.28,867.17 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:867.17,869.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:869.9,871.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:874.2,876.25 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:879.106,881.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:881.16,883.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:885.2,889.62 4 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:889.62,891.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:893.2,893.33 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:893.33,895.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:897.2,897.52 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:897.52,899.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:900.2,903.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:903.9,905.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:907.2,908.65 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:908.65,909.44 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:909.44,911.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:912.3,912.39 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:915.2,915.36 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:915.36,916.51 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:916.51,917.18 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:917.18,920.5 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:920.10,922.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:926.2,926.31 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:929.108,931.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:931.16,933.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:935.2,937.33 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:937.33,939.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:941.2,941.51 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:941.51,943.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:944.2,947.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:947.9,949.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:951.2,952.28 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:952.28,953.38 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:953.38,955.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:958.2,958.58 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:961.110,963.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:963.16,965.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:967.2,969.33 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:969.33,971.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:972.2,972.52 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:972.52,974.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:975.2,977.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:977.9,979.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:980.2,981.20 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:981.20,983.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:985.2,987.69 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:990.120,992.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:992.16,994.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:996.2,1001.16 4 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1001.16,1003.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1005.2,1006.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1006.16,1008.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1010.2,1010.33 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1010.33,1012.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1014.2,1014.51 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1014.51,1016.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1017.2,1020.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1020.9,1022.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1024.2,1024.33 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1024.33,1025.83 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1025.83,1028.4 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1031.2,1031.58 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1034.119,1036.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1036.16,1038.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1040.2,1043.16 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1043.16,1045.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1047.2,1048.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1048.16,1050.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1052.2,1052.33 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1052.33,1054.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1056.2,1056.51 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1056.51,1058.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1059.2,1062.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1062.9,1064.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1066.2,1066.15 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1066.15,1068.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1069.2,1069.14 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1069.14,1071.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1073.2,1073.88 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1073.88,1075.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1077.2,1078.65 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1078.65,1080.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1082.2,1084.18 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1084.18,1085.34 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1085.34,1088.4 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1089.8,1090.34 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1090.34,1093.4 2 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1096.2,1096.58 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1099.118,1101.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1101.16,1103.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1105.2,1109.33 4 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1109.33,1111.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1113.2,1113.51 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1113.51,1115.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1116.2,1119.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1119.9,1121.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1123.2,1126.38 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1126.38,1127.45 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1127.45,1129.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1132.2,1135.28 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1135.28,1137.81 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1137.81,1140.4 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1143.2,1143.58 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1146.110,1148.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1148.16,1150.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1152.2,1161.65 9 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1161.65,1163.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1165.2,1165.62 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1165.62,1167.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1169.2,1169.54 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1169.54,1171.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1171.5,1173.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1173.8,1176.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1176.17,1178.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1179.3,1180.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1180.17,1182.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1185.2,1185.54 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1185.54,1187.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1187.5,1188.61 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1188.61,1190.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1191.3,1191.50 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1191.50,1193.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1194.3,1195.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1195.17,1197.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1198.3,1198.17 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1198.17,1200.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1201.3,1202.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1202.17,1204.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1207.2,1207.33 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1207.33,1209.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1211.2,1211.52 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1211.52,1213.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1214.2,1217.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1217.9,1219.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1221.2,1221.32 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1221.32,1223.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1224.2,1224.15 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1224.15,1226.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1228.2,1229.42 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1229.42,1230.66 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1230.66,1232.15 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1232.15,1234.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1235.4,1235.40 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1238.2,1238.40 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1238.40,1240.39 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1240.39,1241.46 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1241.46,1243.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1245.3,1245.66 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1245.66,1246.15 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1246.15,1248.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1249.4,1249.64 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1253.2,1255.35 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1255.35,1256.24 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1256.24,1257.9 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1259.3,1259.43 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1259.43,1260.107 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1260.107,1262.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1263.4,1263.12 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1265.3,1266.90 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1266.90,1268.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1271.2,1273.34 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1273.34,1274.17 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1274.17,1276.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1276.9,1278.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1281.2,1283.25 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1286.115,1288.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1288.16,1290.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1292.2,1302.62 10 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1302.62,1304.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1306.2,1306.54 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1306.54,1308.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1308.5,1310.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1310.8,1313.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1313.17,1315.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1316.3,1317.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1317.17,1319.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1322.2,1322.54 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1322.54,1324.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1324.5,1325.61 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1325.61,1327.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1328.3,1328.50 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1328.50,1330.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1331.3,1332.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1332.17,1334.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1335.3,1335.17 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1335.17,1337.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1338.3,1339.17 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1339.17,1341.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1344.2,1344.36 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1344.36,1346.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1348.2,1348.55 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1348.55,1350.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1351.2,1354.9 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1354.9,1356.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1358.2,1358.32 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1358.32,1360.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1361.2,1361.15 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1361.15,1363.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1365.2,1366.42 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1366.42,1367.66 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1367.66,1369.15 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1369.15,1371.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1372.4,1372.40 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1375.2,1375.40 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1375.40,1377.39 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1377.39,1378.46 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1378.46,1380.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1382.3,1382.66 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1382.66,1383.15 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1383.15,1385.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1386.4,1386.64 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1390.2,1392.35 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1392.35,1393.24 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1393.24,1394.9 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1396.3,1396.43 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1396.43,1397.107 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1397.107,1399.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1400.4,1400.12 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1402.3,1403.90 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1403.90,1405.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1408.2,1410.40 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1410.40,1411.60 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1411.60,1413.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1414.8,1415.69 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1415.69,1417.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1419.2,1421.71 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1421.71,1423.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1425.2,1425.72 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1428.110,1429.46 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1429.46,1431.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1433.2,1434.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1434.16,1436.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1438.2,1439.15 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1439.15,1440.34 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1440.34,1441.14 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1441.14,1443.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1447.2,1449.33 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1449.33,1450.37 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1450.37,1451.58 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1451.58,1453.5 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1454.4,1456.11 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1456.11,1458.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1459.4,1462.6 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1466.2,1469.35 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1469.35,1470.17 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1470.17,1472.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1472.9,1474.4 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1477.2,1479.25 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1482.115,1484.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1484.16,1486.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1488.2,1491.51 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1491.51,1493.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1495.2,1496.16 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1496.16,1498.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1500.2,1501.15 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1501.15,1502.34 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1502.34,1503.14 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1503.14,1505.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1509.2,1511.33 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1511.33,1512.37 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1512.37,1513.58 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1513.58,1515.5 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1516.4,1518.11 3 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1518.11,1520.5 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1521.4,1524.6 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1528.2,1530.40 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1530.40,1531.60 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1531.60,1533.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1534.8,1535.69 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1535.69,1537.4 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1539.2,1541.64 2 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1541.64,1543.3 1 0 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1545.2,1545.65 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1548.33,1820.2 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:33.108,35.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:35.16,37.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:39.2,48.32 7 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:48.32,49.29 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:49.29,50.9 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:52.3,52.44 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:53.15,54.74 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:54.74,56.5 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:57.16,58.25 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:59.12,60.25 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:64.2,64.66 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:64.66,66.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:68.2,70.52 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:70.52,71.15 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:71.15,72.12 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:74.3,75.23 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:76.11,77.64 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:78.15,80.49 2 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:80.49,86.5 2 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:87.4,87.49 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:87.49,93.5 2 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:94.16,99.6 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:100.12,105.6 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:110.2,110.27 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:110.27,112.34 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:112.34,113.70 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:113.70,116.61 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:116.61,118.6 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:119.5,119.13 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:121.4,121.70 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:121.70,125.36 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:125.36,127.6 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:128.5,128.13 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:130.4,130.39 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:130.39,132.13 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:134.4,134.41 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:134.41,137.25 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:137.25,139.6 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:140.5,140.13 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:142.4,142.55 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:146.2,146.32 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:146.32,149.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:149.17,151.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:152.3,154.10 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:154.10,156.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:157.3,158.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:158.17,160.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:162.3,162.18 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:162.18,165.4 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:167.3,167.52 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:171.2,171.60 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:171.60,173.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:174.2,177.54 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:177.54,179.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:181.2,181.63 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:184.109,186.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:186.16,188.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:189.2,191.33 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:191.33,193.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:195.2,195.52 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:195.52,197.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:198.2,201.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:201.9,203.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:205.2,205.63 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:208.110,210.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:210.16,212.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:214.2,217.43 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:218.10,219.60 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:220.14,221.40 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:221.40,223.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:223.9,225.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:226.15,228.32 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:229.11,231.32 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:234.2,235.43 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:236.10,237.60 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:238.14,239.40 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:239.40,241.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:241.9,243.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:244.15,246.32 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:247.11,249.32 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:252.2,252.33 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:252.33,254.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:256.2,256.52 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:256.52,258.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:259.2,262.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:262.9,264.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:266.2,267.33 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:267.33,268.47 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:268.47,270.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:273.2,273.58 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:276.110,278.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:278.16,280.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:282.2,286.33 4 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:286.33,288.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:290.2,290.52 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:290.52,292.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:293.2,296.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:296.9,298.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:300.2,303.38 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:303.38,304.45 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:304.45,306.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:309.2,311.28 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:311.28,313.81 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:313.81,315.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:318.2,318.51 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:321.109,323.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:323.16,325.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:327.2,327.63 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:327.63,329.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:330.2,330.49 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:330.49,332.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:334.2,335.15 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:335.15,336.34 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:336.34,337.14 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:337.14,339.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:344.2,344.37 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:344.37,347.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:348.2,348.56 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:348.56,350.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:351.2,353.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:353.9,355.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:358.2,360.33 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:360.33,361.38 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:361.38,362.12 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:364.3,365.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:365.17,367.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:368.3,370.10 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:370.10,372.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:373.3,373.27 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:376.2,381.34 4 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:381.34,382.20 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:382.20,384.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:384.9,386.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:389.2,391.25 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:394.114,396.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:396.16,398.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:400.2,403.15 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:403.15,404.34 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:404.34,405.14 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:405.14,407.5 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:412.2,412.37 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:412.37,415.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:416.2,416.56 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:416.56,418.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:419.2,421.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:421.9,423.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:425.2,427.33 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:427.33,428.37 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:428.37,429.58 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:429.58,431.5 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:432.4,433.11 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:433.11,435.5 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:436.4,436.28 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:440.2,442.40 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:442.40,443.60 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:443.60,445.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:446.8,447.69 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:447.69,449.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:451.2,453.63 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:453.63,455.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:457.2,457.64 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:460.111,462.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:462.16,464.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:466.2,470.43 4 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:471.10,472.55 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:473.14,474.57 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:474.57,476.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:476.9,476.64 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:476.64,478.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:478.9,480.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:481.15,483.34 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:484.11,486.34 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:489.2,489.33 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:489.33,492.61 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:492.61,494.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:495.3,499.17 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:499.17,501.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:502.3,503.99 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:506.2,506.51 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:506.51,508.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:509.2,511.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:511.9,513.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:514.2,520.23 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:520.23,522.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:523.2,524.74 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:527.110,529.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:529.16,531.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:533.2,534.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:534.16,536.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:538.2,539.15 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:539.15,540.34 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:540.34,541.14 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:541.14,543.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:547.2,549.33 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:549.33,550.38 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:550.38,553.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:554.3,554.57 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:554.57,556.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:557.3,559.10 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:559.10,561.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:562.3,565.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:568.2,572.33 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:572.33,573.40 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:573.40,574.18 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:574.18,576.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:576.10,578.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:582.2,584.25 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:587.115,589.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:589.16,591.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:593.2,596.51 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:596.51,598.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:600.2,601.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:601.16,603.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:605.2,606.15 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:606.15,607.34 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:607.34,608.14 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:608.14,610.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:614.2,616.33 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:616.33,617.38 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:617.38,619.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:620.3,620.57 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:620.57,622.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:623.3,625.10 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:625.10,627.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:628.3,631.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:634.2,636.71 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:636.71,637.60 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:637.60,639.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:640.8,640.40 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:640.40,641.69 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:641.69,643.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:645.2,647.68 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:647.68,649.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:651.2,651.69 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:654.109,656.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:656.16,658.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:660.2,665.56 4 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:665.56,667.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:668.2,668.20 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:668.20,669.19 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:669.19,671.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:672.3,672.29 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:672.29,674.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:675.3,676.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:676.17,678.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:679.3,679.13 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:679.13,681.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:682.3,683.25 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:687.2,687.57 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:687.57,689.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:690.2,690.21 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:690.21,691.20 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:691.20,693.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:694.3,695.53 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:695.53,697.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:700.2,700.33 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:700.33,701.37 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:701.37,702.57 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:702.57,703.13 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:705.4,706.35 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:706.35,708.13 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:710.4,711.18 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:711.18,714.5 2 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:715.4,719.38 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:719.38,721.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:723.4,725.27 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:729.2,729.30 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:732.108,734.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:734.16,736.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:738.2,742.42 4 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:742.42,744.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:746.2,746.19 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:746.19,748.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:748.17,750.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:751.3,751.12 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:754.2,754.33 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:754.33,756.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:758.2,758.51 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:758.51,760.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:761.2,764.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:764.9,766.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:768.2,769.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:769.16,771.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:773.2,774.36 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:774.36,776.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:778.2,780.25 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:783.111,785.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:785.16,787.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:789.2,791.33 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:791.33,793.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:795.2,795.52 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:795.52,797.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:798.2,801.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:801.9,803.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:805.2,811.36 4 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:811.36,813.21 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:813.21,815.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:815.9,817.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:820.2,822.25 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:825.115,827.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:827.16,829.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:831.2,834.19 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:834.19,836.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:836.17,838.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:841.2,842.19 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:842.19,843.46 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:843.46,845.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:845.9,847.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:850.2,850.33 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:850.33,852.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:854.2,854.52 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:854.52,856.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:857.2,860.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:860.9,862.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:864.2,867.28 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:867.28,868.17 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:868.17,870.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:870.9,872.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:875.2,877.25 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:880.106,882.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:882.16,884.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:886.2,890.62 4 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:890.62,892.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:894.2,894.33 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:894.33,896.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:898.2,898.52 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:898.52,900.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:901.2,904.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:904.9,906.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:908.2,909.65 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:909.65,910.44 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:910.44,912.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:913.3,913.39 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:916.2,916.36 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:916.36,917.51 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:917.51,918.18 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:918.18,921.5 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:921.10,923.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:927.2,927.31 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:930.108,932.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:932.16,934.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:936.2,938.33 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:938.33,940.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:942.2,942.51 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:942.51,944.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:945.2,948.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:948.9,950.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:952.2,953.28 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:953.28,954.38 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:954.38,956.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:959.2,959.58 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:962.110,964.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:964.16,966.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:968.2,970.33 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:970.33,972.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:973.2,973.52 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:973.52,975.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:976.2,978.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:978.9,980.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:981.2,982.20 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:982.20,984.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:986.2,988.69 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:991.120,993.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:993.16,995.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:997.2,1002.16 4 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1002.16,1004.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1006.2,1007.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1007.16,1009.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1011.2,1011.33 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1011.33,1013.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1015.2,1015.51 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1015.51,1017.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1018.2,1021.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1021.9,1023.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1025.2,1025.33 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1025.33,1026.83 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1026.83,1029.4 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1032.2,1032.58 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1035.119,1037.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1037.16,1039.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1041.2,1044.16 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1044.16,1046.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1048.2,1049.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1049.16,1051.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1053.2,1053.33 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1053.33,1055.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1057.2,1057.51 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1057.51,1059.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1060.2,1063.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1063.9,1065.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1067.2,1067.15 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1067.15,1069.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1070.2,1070.14 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1070.14,1072.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1074.2,1074.88 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1074.88,1076.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1078.2,1079.65 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1079.65,1081.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1083.2,1085.18 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1085.18,1086.34 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1086.34,1089.4 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1090.8,1091.34 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1091.34,1094.4 2 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1097.2,1097.58 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1100.118,1102.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1102.16,1104.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1106.2,1110.33 4 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1110.33,1112.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1114.2,1114.51 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1114.51,1116.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1117.2,1120.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1120.9,1122.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1124.2,1127.38 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1127.38,1128.45 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1128.45,1130.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1133.2,1136.28 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1136.28,1138.81 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1138.81,1141.4 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1144.2,1144.58 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1147.110,1149.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1149.16,1151.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1153.2,1162.65 9 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1162.65,1164.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1166.2,1166.62 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1166.62,1168.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1170.2,1170.54 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1170.54,1172.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1172.5,1174.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1174.8,1177.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1177.17,1179.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1180.3,1181.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1181.17,1183.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1186.2,1186.54 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1186.54,1188.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1188.5,1189.61 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1189.61,1191.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1192.3,1192.50 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1192.50,1194.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1195.3,1196.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1196.17,1198.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1199.3,1199.17 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1199.17,1201.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1202.3,1203.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1203.17,1205.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1208.2,1208.33 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1208.33,1210.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1212.2,1212.52 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1212.52,1214.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1215.2,1218.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1218.9,1220.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1222.2,1222.32 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1222.32,1224.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1225.2,1225.15 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1225.15,1227.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1229.2,1230.42 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1230.42,1231.66 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1231.66,1233.15 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1233.15,1235.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1236.4,1236.40 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1239.2,1239.40 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1239.40,1241.39 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1241.39,1242.46 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1242.46,1244.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1246.3,1246.66 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1246.66,1247.15 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1247.15,1249.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1250.4,1250.64 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1254.2,1256.35 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1256.35,1257.24 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1257.24,1258.9 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1260.3,1260.43 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1260.43,1261.107 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1261.107,1263.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1264.4,1264.12 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1266.3,1267.90 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1267.90,1269.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1272.2,1274.34 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1274.34,1275.17 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1275.17,1277.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1277.9,1279.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1282.2,1284.25 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1287.115,1289.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1289.16,1291.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1293.2,1303.62 10 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1303.62,1305.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1307.2,1307.54 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1307.54,1309.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1309.5,1311.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1311.8,1314.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1314.17,1316.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1317.3,1318.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1318.17,1320.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1323.2,1323.54 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1323.54,1325.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1325.5,1326.61 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1326.61,1328.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1329.3,1329.50 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1329.50,1331.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1332.3,1333.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1333.17,1335.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1336.3,1336.17 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1336.17,1338.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1339.3,1340.17 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1340.17,1342.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1345.2,1345.36 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1345.36,1347.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1349.2,1349.55 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1349.55,1351.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1352.2,1355.9 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1355.9,1357.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1359.2,1359.32 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1359.32,1361.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1362.2,1362.15 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1362.15,1364.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1366.2,1367.42 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1367.42,1368.66 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1368.66,1370.15 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1370.15,1372.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1373.4,1373.40 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1376.2,1376.40 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1376.40,1378.39 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1378.39,1379.46 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1379.46,1381.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1383.3,1383.66 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1383.66,1384.15 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1384.15,1386.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1387.4,1387.64 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1391.2,1393.35 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1393.35,1394.24 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1394.24,1395.9 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1397.3,1397.43 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1397.43,1398.107 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1398.107,1400.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1401.4,1401.12 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1403.3,1404.90 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1404.90,1406.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1409.2,1411.40 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1411.40,1412.60 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1412.60,1414.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1415.8,1416.69 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1416.69,1418.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1420.2,1422.71 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1422.71,1424.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1426.2,1426.72 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1429.110,1430.46 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1430.46,1432.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1434.2,1435.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1435.16,1437.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1439.2,1440.15 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1440.15,1441.34 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1441.34,1442.14 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1442.14,1444.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1448.2,1450.33 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1450.33,1451.37 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1451.37,1452.58 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1452.58,1454.5 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1455.4,1457.11 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1457.11,1459.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1460.4,1463.6 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1467.2,1470.35 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1470.35,1471.17 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1471.17,1473.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1473.9,1475.4 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1478.2,1480.25 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1483.115,1485.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1485.16,1487.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1489.2,1492.51 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1492.51,1494.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1496.2,1497.16 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1497.16,1499.3 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1501.2,1502.15 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1502.15,1503.34 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1503.34,1504.14 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1504.14,1506.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1510.2,1512.33 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1512.33,1513.37 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1513.37,1514.58 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1514.58,1516.5 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1517.4,1519.11 3 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1519.11,1521.5 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1522.4,1525.6 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1529.2,1531.40 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1531.40,1532.60 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1532.60,1534.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1535.8,1536.69 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1536.69,1538.4 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1540.2,1542.64 2 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1542.64,1544.3 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1546.2,1546.65 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/commands.go:1549.33,1821.2 1 0 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:24.50,25.18 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:25.18,27.3 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:28.2,28.22 1 1 @@ -2946,7 +2946,7 @@ github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:87.2,87.18 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:87.18,89.3 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:90.2,90.17 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:90.17,92.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:93.2,93.49 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:93.2,93.53 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:96.57,97.18 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:97.18,99.3 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:100.2,100.58 1 1 @@ -2957,7 +2957,7 @@ github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:108.2,108.18 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:108.18,110.3 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:111.2,111.17 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:111.17,113.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:114.2,114.49 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:114.2,114.53 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:117.51,118.18 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:118.18,120.3 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:121.2,121.54 1 1 @@ -2966,7 +2966,7 @@ github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:124.2,124.18 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:124.18,126.3 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:127.2,127.17 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:127.17,129.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:130.2,130.49 1 0 +github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:130.2,130.53 1 0 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:133.53,134.18 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:134.18,136.3 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:137.2,137.22 1 1 @@ -3016,7 +3016,7 @@ github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:236.2,236.18 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:236.18,238.3 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:239.2,239.17 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:239.17,241.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:242.2,242.49 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:242.2,242.53 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:245.57,246.18 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:246.18,248.3 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:249.2,249.58 1 1 @@ -3027,7 +3027,7 @@ github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:257.2,257.18 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:257.18,259.3 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:260.2,260.17 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:260.17,262.3 1 1 -github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:263.2,263.49 1 1 +github.com/echovault/echovault/pkg/modules/sorted_set/key_funcs.go:263.2,263.53 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/utils.go:24.97,26.60 2 1 github.com/echovault/echovault/pkg/modules/sorted_set/utils.go:26.60,28.3 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/utils.go:29.2,29.24 1 1 @@ -3063,70 +3063,70 @@ github.com/echovault/echovault/pkg/modules/sorted_set/utils.go:85.8,85.31 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/utils.go:85.31,86.34 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/utils.go:86.34,88.4 1 1 github.com/echovault/echovault/pkg/modules/sorted_set/utils.go:91.2,91.50 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:26.112,28.16 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:28.16,30.3 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:32.2,35.9 3 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:35.9,37.3 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:39.2,41.33 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:41.33,42.61 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:42.61,44.4 1 0 -github.com/echovault/echovault/pkg/modules/string/commands.go:45.3,45.58 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:45.58,47.4 1 0 -github.com/echovault/echovault/pkg/modules/string/commands.go:48.3,49.58 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:52.2,52.52 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:52.52,54.3 1 0 -github.com/echovault/echovault/pkg/modules/string/commands.go:55.2,58.9 3 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:58.9,60.3 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:63.2,63.24 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:63.24,65.58 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:65.58,67.4 1 0 -github.com/echovault/echovault/pkg/modules/string/commands.go:68.3,68.58 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:72.2,72.16 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:72.16,74.58 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:74.58,76.4 1 0 -github.com/echovault/echovault/pkg/modules/string/commands.go:77.3,77.58 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:80.2,82.35 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:82.35,84.24 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:84.24,87.12 3 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:90.3,91.8 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:94.2,94.67 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:94.67,96.3 1 0 -github.com/echovault/echovault/pkg/modules/string/commands.go:98.2,98.59 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:101.110,103.16 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:103.16,105.3 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:107.2,109.33 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:109.33,111.3 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:113.2,113.53 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:113.53,115.3 1 0 -github.com/echovault/echovault/pkg/modules/string/commands.go:116.2,120.9 3 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:120.9,122.3 1 0 -github.com/echovault/echovault/pkg/modules/string/commands.go:124.2,124.56 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:127.110,129.16 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:129.16,131.3 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:133.2,139.24 5 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:139.24,141.3 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:143.2,143.33 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:143.33,145.3 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:147.2,147.52 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:147.52,149.3 1 0 -github.com/echovault/echovault/pkg/modules/string/commands.go:150.2,153.9 3 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:153.9,155.3 1 0 -github.com/echovault/echovault/pkg/modules/string/commands.go:157.2,157.15 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:157.15,159.3 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:160.2,160.13 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:160.13,162.3 1 0 -github.com/echovault/echovault/pkg/modules/string/commands.go:164.2,164.30 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:164.30,166.3 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:168.2,168.22 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:168.22,170.3 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:172.2,172.17 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:172.17,175.3 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:177.2,179.14 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:179.14,181.38 2 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:181.38,183.4 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:184.3,184.12 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:187.2,187.65 1 1 -github.com/echovault/echovault/pkg/modules/string/commands.go:190.33,229.2 1 0 +github.com/echovault/echovault/pkg/modules/string/commands.go:27.112,29.16 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:29.16,31.3 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:33.2,36.9 3 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:36.9,38.3 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:40.2,42.33 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:42.33,43.61 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:43.61,45.4 1 0 +github.com/echovault/echovault/pkg/modules/string/commands.go:46.3,46.58 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:46.58,48.4 1 0 +github.com/echovault/echovault/pkg/modules/string/commands.go:49.3,50.58 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:53.2,53.52 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:53.52,55.3 1 0 +github.com/echovault/echovault/pkg/modules/string/commands.go:56.2,59.9 3 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:59.9,61.3 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:64.2,64.24 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:64.24,66.58 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:66.58,68.4 1 0 +github.com/echovault/echovault/pkg/modules/string/commands.go:69.3,69.58 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:73.2,73.16 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:73.16,75.58 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:75.58,77.4 1 0 +github.com/echovault/echovault/pkg/modules/string/commands.go:78.3,78.58 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:81.2,83.35 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:83.35,85.24 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:85.24,88.12 3 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:91.3,92.8 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:95.2,95.67 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:95.67,97.3 1 0 +github.com/echovault/echovault/pkg/modules/string/commands.go:99.2,99.59 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:102.110,104.16 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:104.16,106.3 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:108.2,110.33 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:110.33,112.3 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:114.2,114.53 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:114.53,116.3 1 0 +github.com/echovault/echovault/pkg/modules/string/commands.go:117.2,121.9 3 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:121.9,123.3 1 0 +github.com/echovault/echovault/pkg/modules/string/commands.go:125.2,125.56 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:128.110,130.16 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:130.16,132.3 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:134.2,140.24 5 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:140.24,142.3 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:144.2,144.33 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:144.33,146.3 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:148.2,148.52 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:148.52,150.3 1 0 +github.com/echovault/echovault/pkg/modules/string/commands.go:151.2,154.9 3 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:154.9,156.3 1 0 +github.com/echovault/echovault/pkg/modules/string/commands.go:158.2,158.15 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:158.15,160.3 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:161.2,161.13 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:161.13,163.3 1 0 +github.com/echovault/echovault/pkg/modules/string/commands.go:165.2,165.30 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:165.30,167.3 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:169.2,169.22 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:169.22,171.3 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:173.2,173.17 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:173.17,176.3 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:178.2,180.14 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:180.14,182.38 2 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:182.38,184.4 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:185.3,185.12 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:188.2,188.65 1 1 +github.com/echovault/echovault/pkg/modules/string/commands.go:191.33,230.2 1 0 github.com/echovault/echovault/pkg/modules/string/key_funcs.go:22.54,23.19 1 1 github.com/echovault/echovault/pkg/modules/string/key_funcs.go:23.19,25.3 1 1 github.com/echovault/echovault/pkg/modules/string/key_funcs.go:26.2,26.30 1 1 diff --git a/internal/acl/acl.go b/internal/acl/acl.go index db57282..3fdf634 100644 --- a/internal/acl/acl.go +++ b/internal/acl/acl.go @@ -21,7 +21,8 @@ import ( "errors" "fmt" "github.com/echovault/echovault/internal/config" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "github.com/gobwas/glob" "gopkg.in/yaml.v3" "log" @@ -285,7 +286,7 @@ func (acl *ACL) AuthenticateConnection(_ context.Context, conn *net.Conn, cmd [] return errors.New("could not authenticate user") } -func (acl *ACL) AuthorizeConnection(conn *net.Conn, cmd []string, command utils.Command, subCommand utils.SubCommand) error { +func (acl *ACL) AuthorizeConnection(conn *net.Conn, cmd []string, command types.Command, subCommand types.SubCommand) error { acl.RLockUsers() defer acl.RUnlockUsers() @@ -298,7 +299,7 @@ func (acl *ACL) AuthorizeConnection(conn *net.Conn, cmd []string, command utils. return err } - if !reflect.DeepEqual(subCommand, utils.SubCommand{}) { + if !reflect.DeepEqual(subCommand, types.SubCommand{}) { comm = fmt.Sprintf("%s|%s", comm, subCommand.Command) categories = append(categories, subCommand.Categories...) keys, err = subCommand.KeyExtractionFunc(cmd) @@ -380,7 +381,7 @@ func (acl *ACL) AuthorizeConnection(conn *net.Conn, cmd []string, command utils. } // 6. PUBSUB authorisation. - if slices.Contains(categories, utils.PubSubCategory) { + if slices.Contains(categories, constants.PubSubCategory) { // In PUBSUB, KeyExtractionFunc returns channels so keys[0] is aliased to channel channel := keys[0] // 2.1) Check if the channel is in IncludedPubSubChannels @@ -405,7 +406,7 @@ func (acl *ACL) AuthorizeConnection(conn *net.Conn, cmd []string, command utils. } // 8. If @read is in the list of categories, check if keys are in IncludedReadKeys - if slices.Contains(categories, utils.ReadCategory) { + if slices.Contains(categories, constants.ReadCategory) { if !slices.ContainsFunc(keys, func(key string) bool { return slices.ContainsFunc(connection.User.IncludedReadKeys, func(readKeyGlob string) bool { if acl.GlobPatterns[readKeyGlob].Match(key) { @@ -420,7 +421,7 @@ func (acl *ACL) AuthorizeConnection(conn *net.Conn, cmd []string, command utils. } // 9. If @write is in the list of categories, check if keys are in IncludedWriteKeys - if slices.Contains(categories, utils.WriteCategory) { + if slices.Contains(categories, constants.WriteCategory) { if !slices.ContainsFunc(keys, func(key string) bool { return slices.ContainsFunc(connection.User.IncludedWriteKeys, func(writeKeyGlob string) bool { if acl.GlobPatterns[writeKeyGlob].Match(key) { diff --git a/internal/config/config.go b/internal/config/config.go index 2d0a59e..cd20a93 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -20,7 +20,7 @@ import ( "flag" "fmt" "github.com/echovault/echovault/internal" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" "log" "os" "path" @@ -108,7 +108,7 @@ There is no limit by default.`, func(memory string) error { return nil }) - evictionPolicy := utils.NoEviction + evictionPolicy := constants.NoEviction flag.Func("eviction-policy", `The eviction policy used to remove keys when max-memory is reached. The options are: 1) noeviction - Do not evict any keys even when max-memory is exceeded. 2) allkeys-lfu - Evict the least frequently used keys. @@ -118,9 +118,9 @@ There is no limit by default.`, func(memory string) error { 6) allkeys-random - Evict random keys until we get under the max-memory limit. 7) volatile-random - Evict random keys with an expiration.`, func(policy string) error { policies := []string{ - utils.NoEviction, - utils.AllKeysLFU, utils.AllKeysLRU, utils.AllKeysRandom, - utils.VolatileLFU, utils.VolatileLRU, utils.VolatileRandom, + constants.NoEviction, + constants.AllKeysLFU, constants.AllKeysLRU, constants.AllKeysRandom, + constants.VolatileLFU, constants.VolatileLRU, constants.VolatileRandom, } policyIdx := slices.Index(policies, strings.ToLower(policy)) if policyIdx == -1 { diff --git a/internal/config/default.go b/internal/config/default.go index 284363c..7daf435 100644 --- a/internal/config/default.go +++ b/internal/config/default.go @@ -1,7 +1,7 @@ package config import ( - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" "time" ) @@ -30,7 +30,7 @@ func DefaultConfig() Config { RestoreSnapshot: false, AOFSyncStrategy: "everysec", MaxMemory: 0, - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, EvictionSample: 20, EvictionInterval: 100 * time.Millisecond, } diff --git a/internal/raft/fsm.go b/internal/raft/fsm.go index 7a2eb3d..19a7741 100644 --- a/internal/raft/fsm.go +++ b/internal/raft/fsm.go @@ -20,7 +20,7 @@ import ( "fmt" "github.com/echovault/echovault/internal" "github.com/echovault/echovault/internal/config" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/types" "github.com/hashicorp/raft" "io" "log" @@ -29,9 +29,9 @@ import ( type FSMOpts struct { Config config.Config - EchoVault utils.EchoVault + EchoVault types.EchoVault GetState func() map[string]internal.KeyData - GetCommand func(command string) (utils.Command, error) + GetCommand func(command string) (types.Command, error) DeleteKey func(ctx context.Context, key string) error } @@ -94,7 +94,7 @@ func (fsm *FSM) Apply(log *raft.Log) interface{} { handler := command.HandlerFunc - subCommand, ok := internal.GetSubCommand(command, request.CMD).(utils.SubCommand) + subCommand, ok := internal.GetSubCommand(command, request.CMD).(types.SubCommand) if ok { handler = subCommand.HandlerFunc } diff --git a/internal/raft/raft.go b/internal/raft/raft.go index 284e5f9..c6667c9 100644 --- a/internal/raft/raft.go +++ b/internal/raft/raft.go @@ -27,16 +27,16 @@ import ( "path/filepath" "time" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/types" "github.com/hashicorp/raft" raftboltdb "github.com/hashicorp/raft-boltdb" ) type Opts struct { Config config.Config - EchoVault utils.EchoVault + EchoVault types.EchoVault GetState func() map[string]internal.KeyData - GetCommand func(command string) (utils.Command, error) + GetCommand func(command string) (types.Command, error) DeleteKey func(ctx context.Context, key string) error } diff --git a/internal/utils.go b/internal/utils.go index 67eb318..6f417c2 100644 --- a/internal/utils.go +++ b/internal/utils.go @@ -20,7 +20,8 @@ import ( "cmp" "errors" "fmt" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "io" "log" "math/big" @@ -128,7 +129,7 @@ func GetIPAddress() (string, error) { return localAddr, nil } -func GetSubCommand(command utils.Command, cmd []string) interface{} { +func GetSubCommand(command types.Command, cmd []string) interface{} { if len(command.SubCommands) == 0 || len(cmd) < 2 { return nil } @@ -140,8 +141,8 @@ func GetSubCommand(command utils.Command, cmd []string) interface{} { return nil } -func IsWriteCommand(command utils.Command, subCommand utils.SubCommand) bool { - return slices.Contains(append(command.Categories, subCommand.Categories...), utils.WriteCategory) +func IsWriteCommand(command types.Command, subCommand types.SubCommand) bool { + return slices.Contains(append(command.Categories, subCommand.Categories...), constants.WriteCategory) } func AbsInt(n int) int { diff --git a/pkg/commands/commands.go b/pkg/commands/commands.go index 79ff4d2..4cc7643 100644 --- a/pkg/commands/commands.go +++ b/pkg/commands/commands.go @@ -11,12 +11,12 @@ import ( "github.com/echovault/echovault/pkg/modules/set" "github.com/echovault/echovault/pkg/modules/sorted_set" str "github.com/echovault/echovault/pkg/modules/string" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/types" ) // All returns all the commands currently available on EchoVault -func All() []utils.Command { - var commands []utils.Command +func All() []types.Command { + var commands []types.Command commands = append(commands, acl.Commands()...) commands = append(commands, admin.Commands()...) commands = append(commands, generic.Commands()...) diff --git a/pkg/utils/const.go b/pkg/constants/const.go similarity index 99% rename from pkg/utils/const.go rename to pkg/constants/const.go index db2f901..2d724e0 100644 --- a/pkg/utils/const.go +++ b/pkg/constants/const.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package utils +package constants const ( ACLModule = "acl" diff --git a/pkg/echovault/api_hash_test.go b/pkg/echovault/api_hash_test.go index 4d3cec2..fc08e25 100644 --- a/pkg/echovault/api_hash_test.go +++ b/pkg/echovault/api_hash_test.go @@ -17,7 +17,7 @@ package echovault import ( "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/commands" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" "reflect" "slices" "testing" @@ -28,7 +28,7 @@ func TestEchoVault_HDEL(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -95,7 +95,7 @@ func TestEchoVault_HEXISTS(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -154,7 +154,7 @@ func TestEchoVault_HGETALL(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -216,7 +216,7 @@ func TestEchoVault_HINCRBY(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -330,7 +330,7 @@ func TestEchoVault_HKEYS(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -390,7 +390,7 @@ func TestEchoVault_HLEN(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -445,7 +445,7 @@ func TestEchoVault_HRANDFIELD(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -579,7 +579,7 @@ func TestEchoVault_HSET(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -669,7 +669,7 @@ func TestEchoVault_HSTRLEN(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -738,7 +738,7 @@ func TestEchoVault_HVALS(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) diff --git a/pkg/echovault/api_list_test.go b/pkg/echovault/api_list_test.go index 8a0cd91..932404f 100644 --- a/pkg/echovault/api_list_test.go +++ b/pkg/echovault/api_list_test.go @@ -18,7 +18,7 @@ import ( "fmt" "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/pkg/commands" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" "reflect" "testing" ) @@ -28,7 +28,7 @@ func TestEchoVault_LLEN(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -87,7 +87,7 @@ func TestEchoVault_LINDEX(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -187,7 +187,7 @@ func TestEchoVault_LMOVE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -359,7 +359,7 @@ func TestEchoVault_POP(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -431,7 +431,7 @@ func TestEchoVault_LPUSH(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -508,7 +508,7 @@ func TestEchoVault_RPUSH(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -565,7 +565,7 @@ func TestEchoVault_LRANGE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -686,7 +686,7 @@ func TestEchoVault_LREM(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -753,7 +753,7 @@ func TestEchoVault_LSET(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -860,7 +860,7 @@ func TestEchoVault_LTRIM(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) diff --git a/pkg/echovault/api_set_test.go b/pkg/echovault/api_set_test.go index 878df46..1f01ff3 100644 --- a/pkg/echovault/api_set_test.go +++ b/pkg/echovault/api_set_test.go @@ -18,7 +18,7 @@ import ( "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/internal/set" "github.com/echovault/echovault/pkg/commands" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" "reflect" "slices" "testing" @@ -29,7 +29,7 @@ func TestEchoVault_SADD(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -88,7 +88,7 @@ func TestEchoVault_SCARD(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -143,7 +143,7 @@ func TestEchoVault_SDIFF(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -237,7 +237,7 @@ func TestEchoVault_SDIFFSTORE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -332,7 +332,7 @@ func TestEchoVault_SINTER(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -426,7 +426,7 @@ func TestEchoVault_SINTERCARD(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -532,7 +532,7 @@ func TestEchoVault_SINTERSTORE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -627,7 +627,7 @@ func TestEchoVault_SISMEMBER(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -686,7 +686,7 @@ func TestEchoVault_SMEMBERS(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -746,7 +746,7 @@ func TestEchoVault_SMISMEMBER(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -824,7 +824,7 @@ func TestEchoVault_SMOVE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -910,7 +910,7 @@ func TestEchoVault_SPOP(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -963,7 +963,7 @@ func TestEchoVault_SRANDMEMBER(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -1032,7 +1032,7 @@ func TestEchoVault_SREM(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -1091,7 +1091,7 @@ func TestEchoVault_SUNION(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -1178,7 +1178,7 @@ func TestEchoVault_SUNIONSTORE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) diff --git a/pkg/echovault/api_sorted_set_test.go b/pkg/echovault/api_sorted_set_test.go index 02140aa..ee9f3cc 100644 --- a/pkg/echovault/api_sorted_set_test.go +++ b/pkg/echovault/api_sorted_set_test.go @@ -19,7 +19,7 @@ import ( "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/internal/sorted_set" "github.com/echovault/echovault/pkg/commands" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" "math" "reflect" "strconv" @@ -31,7 +31,7 @@ func TestEchoVault_ZADD(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -257,7 +257,7 @@ func TestEchoVault_ZCARD(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -320,7 +320,7 @@ func TestEchoVault_ZCOUNT(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -421,7 +421,7 @@ func TestEchoVault_ZDIFF(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -573,7 +573,7 @@ func TestEchoVault_ZDIFFSTORE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -694,7 +694,7 @@ func TestEchoVault_ZINCRBY(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -844,7 +844,7 @@ func TestEchoVault_ZINTER(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -1157,7 +1157,7 @@ func TestEchoVault_ZINTERSTORE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -1484,7 +1484,7 @@ func TestEchoVault_ZLEXCOUNT(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -1577,7 +1577,7 @@ func TestEchoVault_ZMPOP(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -1733,7 +1733,7 @@ func TestEchoVault_ZMSCORE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -1814,7 +1814,7 @@ func TestEchoVault_ZPOP(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -1922,7 +1922,7 @@ func TestEchoVault_ZRANDMEMBER(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -1998,7 +1998,7 @@ func TestEchoVault_ZRANGE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -2163,7 +2163,7 @@ func TestEchoVault_ZRANGESTORE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -2377,7 +2377,7 @@ func TestEchoVault_ZRANK(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -2476,7 +2476,7 @@ func TestEchoVault_ZREM(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -2547,7 +2547,7 @@ func TestEchoVault_ZREMRANGEBYSCORE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -2619,7 +2619,7 @@ func TestEchoVault_ZSCORE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -2699,7 +2699,7 @@ func TestEchoVault_ZUNION(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) @@ -3037,7 +3037,7 @@ func TestEchoVault_ZUNIONSTORE(t *testing.T) { WithCommands(commands.All()), WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) diff --git a/pkg/echovault/echovault.go b/pkg/echovault/echovault.go index 660e788..8960402 100644 --- a/pkg/echovault/echovault.go +++ b/pkg/echovault/echovault.go @@ -29,7 +29,8 @@ import ( "github.com/echovault/echovault/internal/pubsub" "github.com/echovault/echovault/internal/raft" "github.com/echovault/echovault/internal/snapshot" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "io" "log" "net" @@ -69,7 +70,7 @@ type EchoVault struct { } // Holds the list of all commands supported by the echovault. - commands []utils.Command + commands []types.Command raft *raft.Raft // The raft replication layer for the echovault. memberList *memberlist.MemberList // The memberlist layer for the echovault. @@ -100,7 +101,7 @@ func WithConfig(config config.Config) func(echovault *EchoVault) { } } -func WithCommands(commands []utils.Command) func(echovault *EchoVault) { +func WithCommands(commands []types.Command) func(echovault *EchoVault) { return func(echovault *EchoVault) { echovault.commands = commands } @@ -109,7 +110,7 @@ func WithCommands(commands []utils.Command) func(echovault *EchoVault) { func NewEchoVault(options ...func(echovault *EchoVault)) *EchoVault { echovault := &EchoVault{ context: context.Background(), - commands: make([]utils.Command, 0), + commands: make([]types.Command, 0), config: config.DefaultConfig(), store: make(map[string]internal.KeyData), keyLocks: make(map[string]*sync.RWMutex), @@ -220,7 +221,7 @@ func NewEchoVault(options ...func(echovault *EchoVault)) *EchoVault { } // If eviction policy is not noeviction, start a goroutine to evict keys every 100 milliseconds. - if echovault.config.EvictionPolicy != utils.NoEviction { + if echovault.config.EvictionPolicy != constants.NoEviction { go func() { for { <-time.After(echovault.config.EvictionInterval) diff --git a/pkg/echovault/keyspace.go b/pkg/echovault/keyspace.go index bcda4df..a02135c 100644 --- a/pkg/echovault/keyspace.go +++ b/pkg/echovault/keyspace.go @@ -19,7 +19,7 @@ import ( "errors" "fmt" "github.com/echovault/echovault/internal" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" "log" "math/rand" "runtime" @@ -128,7 +128,7 @@ func (server *EchoVault) KeyExists(ctx context.Context, key string) bool { // CreateKeyAndLock creates a new key lock and immediately locks it if the key does not exist. // If the key exists, the existing key is locked. func (server *EchoVault) CreateKeyAndLock(ctx context.Context, key string) (bool, error) { - if internal.IsMaxMemoryExceeded(server.config.MaxMemory) && server.config.EvictionPolicy == utils.NoEviction { + if internal.IsMaxMemoryExceeded(server.config.MaxMemory) && server.config.EvictionPolicy == constants.NoEviction { return false, errors.New("max memory reached, key not created") } @@ -166,7 +166,7 @@ func (server *EchoVault) GetValue(ctx context.Context, key string) interface{} { // This count triggers a snapshot when the threshold is reached. // The key must be locked prior to calling this function. func (server *EchoVault) SetValue(ctx context.Context, key string, value interface{}) error { - if internal.IsMaxMemoryExceeded(server.config.MaxMemory) && server.config.EvictionPolicy == utils.NoEviction { + if internal.IsMaxMemoryExceeded(server.config.MaxMemory) && server.config.EvictionPolicy == constants.NoEviction { return errors.New("max memory reached, key value not set") } @@ -276,9 +276,9 @@ func (server *EchoVault) DeleteKey(ctx context.Context, key string) error { // Remove the key from the cache. switch { - case slices.Contains([]string{utils.AllKeysLFU, utils.VolatileLFU}, server.config.EvictionPolicy): + case slices.Contains([]string{constants.AllKeysLFU, constants.VolatileLFU}, server.config.EvictionPolicy): server.lfuCache.cache.Delete(key) - case slices.Contains([]string{utils.AllKeysLRU, utils.VolatileLRU}, server.config.EvictionPolicy): + case slices.Contains([]string{constants.AllKeysLRU, constants.VolatileLRU}, server.config.EvictionPolicy): server.lruCache.cache.Delete(key) } @@ -299,21 +299,21 @@ func (server *EchoVault) updateKeyInCache(ctx context.Context, key string) error return nil } switch strings.ToLower(server.config.EvictionPolicy) { - case utils.AllKeysLFU: + case constants.AllKeysLFU: server.lfuCache.mutex.Lock() defer server.lfuCache.mutex.Unlock() server.lfuCache.cache.Update(key) - case utils.AllKeysLRU: + case constants.AllKeysLRU: server.lruCache.mutex.Lock() defer server.lruCache.mutex.Unlock() server.lruCache.cache.Update(key) - case utils.VolatileLFU: + case constants.VolatileLFU: server.lfuCache.mutex.Lock() defer server.lfuCache.mutex.Unlock() if server.store[key].ExpireAt != (time.Time{}) { server.lfuCache.cache.Update(key) } - case utils.VolatileLRU: + case constants.VolatileLRU: server.lruCache.mutex.Lock() defer server.lruCache.mutex.Unlock() if server.store[key].ExpireAt != (time.Time{}) { @@ -350,7 +350,7 @@ func (server *EchoVault) adjustMemoryUsage(ctx context.Context) error { // Start a loop that evicts keys until either the heap is empty or // we're below the max memory limit. switch { - case slices.Contains([]string{utils.AllKeysLFU, utils.VolatileLFU}, strings.ToLower(server.config.EvictionPolicy)): + case slices.Contains([]string{constants.AllKeysLFU, constants.VolatileLFU}, strings.ToLower(server.config.EvictionPolicy)): // Remove keys from LFU cache until we're below the max memory limit or // until the LFU cache is empty. server.lfuCache.mutex.Lock() @@ -382,7 +382,7 @@ func (server *EchoVault) adjustMemoryUsage(ctx context.Context) error { return nil } } - case slices.Contains([]string{utils.AllKeysLRU, utils.VolatileLRU}, strings.ToLower(server.config.EvictionPolicy)): + case slices.Contains([]string{constants.AllKeysLRU, constants.VolatileLRU}, strings.ToLower(server.config.EvictionPolicy)): // Remove keys from th LRU cache until we're below the max memory limit or // until the LRU cache is empty. server.lruCache.mutex.Lock() @@ -415,7 +415,7 @@ func (server *EchoVault) adjustMemoryUsage(ctx context.Context) error { return nil } } - case slices.Contains([]string{utils.AllKeysRandom}, strings.ToLower(server.config.EvictionPolicy)): + case slices.Contains([]string{constants.AllKeysRandom}, strings.ToLower(server.config.EvictionPolicy)): // Remove random keys until we're below the max memory limit // or there are no more keys remaining. for { @@ -449,7 +449,7 @@ func (server *EchoVault) adjustMemoryUsage(ctx context.Context) error { idx-- } } - case slices.Contains([]string{utils.VolatileRandom}, strings.ToLower(server.config.EvictionPolicy)): + case slices.Contains([]string{constants.VolatileRandom}, strings.ToLower(server.config.EvictionPolicy)): // Remove random keys with an associated expiry time until we're below the max memory limit // or there are no more keys with expiry time. for { diff --git a/pkg/echovault/modules.go b/pkg/echovault/modules.go index 300d2a8..4a0be1c 100644 --- a/pkg/echovault/modules.go +++ b/pkg/echovault/modules.go @@ -19,12 +19,13 @@ import ( "errors" "fmt" "github.com/echovault/echovault/internal" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "net" "strings" ) -func (server *EchoVault) GetAllCommands() []utils.Command { +func (server *EchoVault) GetAllCommands() []types.Command { return server.commands } @@ -36,13 +37,13 @@ func (server *EchoVault) GetPubSub() interface{} { return server.PubSub } -func (server *EchoVault) getCommand(cmd string) (utils.Command, error) { +func (server *EchoVault) getCommand(cmd string) (types.Command, error) { for _, command := range server.commands { if strings.EqualFold(command.Command, cmd) { return command, nil } } - return utils.Command{}, fmt.Errorf("command %s not supported", cmd) + return types.Command{}, fmt.Errorf("command %s not supported", cmd) } func (server *EchoVault) handleCommand(ctx context.Context, message []byte, conn *net.Conn, replay bool) ([]byte, error) { @@ -59,7 +60,7 @@ func (server *EchoVault) handleCommand(ctx context.Context, message []byte, conn synchronize := command.Sync handler := command.HandlerFunc - subCommand, ok := internal.GetSubCommand(command, cmd).(utils.SubCommand) + subCommand, ok := internal.GetSubCommand(command, cmd).(types.SubCommand) if ok { synchronize = subCommand.Sync handler = subCommand.HandlerFunc @@ -110,7 +111,7 @@ func (server *EchoVault) handleCommand(ctx context.Context, message []byte, conn // Forward message to leader and return immediate OK response if server.config.ForwardCommand { server.memberList.ForwardDataMutation(ctx, message) - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } return nil, errors.New("not cluster leader, cannot carry out command") diff --git a/pkg/modules/acl/commands.go b/pkg/modules/acl/commands.go index ef87b12..c7dfd8e 100644 --- a/pkg/modules/acl/commands.go +++ b/pkg/modules/acl/commands.go @@ -20,7 +20,8 @@ import ( "errors" "fmt" internal_acl "github.com/echovault/echovault/internal/acl" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "gopkg.in/yaml.v3" "log" "net" @@ -30,9 +31,9 @@ import ( "strings" ) -func handleAuth(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleAuth(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { if len(cmd) < 2 || len(cmd) > 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { @@ -41,12 +42,12 @@ func handleAuth(ctx context.Context, cmd []string, server utils.EchoVault, conn if err := acl.AuthenticateConnection(ctx, conn, cmd); err != nil { return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func handleGetUser(_ context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleGetUser(_ context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { if len(cmd) != 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } acl, ok := server.GetACL().(*internal_acl.ACL) @@ -161,9 +162,9 @@ func handleGetUser(_ context.Context, cmd []string, server utils.EchoVault, _ *n return []byte(res), nil } -func handleCat(_ context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleCat(_ context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { if len(cmd) > 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } categories := make(map[string][]string) @@ -221,7 +222,7 @@ func handleCat(_ context.Context, cmd []string, server utils.EchoVault, _ *net.C return nil, fmt.Errorf("category %s not found", strings.ToUpper(cmd[2])) } -func handleUsers(_ context.Context, _ []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleUsers(_ context.Context, _ []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { return nil, errors.New("could not load ACL") @@ -234,7 +235,7 @@ func handleUsers(_ context.Context, _ []string, server utils.EchoVault, _ *net.C return []byte(res), nil } -func handleSetUser(_ context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleSetUser(_ context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { return nil, errors.New("could not load ACL") @@ -242,12 +243,12 @@ func handleSetUser(_ context.Context, cmd []string, server utils.EchoVault, _ *n if err := acl.SetUser(cmd[2:]); err != nil { return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func handleDelUser(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleDelUser(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { @@ -256,10 +257,10 @@ func handleDelUser(ctx context.Context, cmd []string, server utils.EchoVault, _ if err := acl.DeleteUser(ctx, cmd[2:]); err != nil { return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func handleWhoAmI(_ context.Context, _ []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleWhoAmI(_ context.Context, _ []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { return nil, errors.New("could not load ACL") @@ -268,9 +269,9 @@ func handleWhoAmI(_ context.Context, _ []string, server utils.EchoVault, conn *n return []byte(fmt.Sprintf("+%s\r\n", connectionInfo.User.Username)), nil } -func handleList(_ context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleList(_ context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { if len(cmd) > 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } acl, ok := server.GetACL().(*internal_acl.ACL) if !ok { @@ -364,9 +365,9 @@ func handleList(_ context.Context, cmd []string, server utils.EchoVault, _ *net. return []byte(res), nil } -func handleLoad(_ context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleLoad(_ context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { if len(cmd) != 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } acl, ok := server.GetACL().(*internal_acl.ACL) @@ -428,12 +429,12 @@ func handleLoad(_ context.Context, cmd []string, server utils.EchoVault, _ *net. } } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func handleSave(_ context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleSave(_ context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { if len(cmd) > 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } acl, ok := server.GetACL().(*internal_acl.ACL) @@ -486,15 +487,15 @@ func handleSave(_ context.Context, cmd []string, server utils.EchoVault, _ *net. return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func Commands() []utils.Command { - return []utils.Command{ +func Commands() []types.Command { + return []types.Command{ { Command: "auth", - Module: utils.ACLModule, - Categories: []string{utils.ConnectionCategory, utils.SlowCategory}, + Module: constants.ACLModule, + Categories: []string{constants.ConnectionCategory, constants.SlowCategory}, Description: "(AUTH [username] password) Authenticates the connection", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { @@ -504,18 +505,18 @@ func Commands() []utils.Command { }, { Command: "acl", - Module: utils.ACLModule, + Module: constants.ACLModule, Categories: []string{}, Description: "Access-Control-List commands", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { return []string{}, nil }, - SubCommands: []utils.SubCommand{ + SubCommands: []types.SubCommand{ { Command: "cat", - Module: utils.ACLModule, - Categories: []string{utils.SlowCategory}, + Module: constants.ACLModule, + Categories: []string{constants.SlowCategory}, Description: `(ACL CAT [category]) List all the categories. If the optional category is provided, list all the commands in the category`, Sync: false, @@ -526,8 +527,8 @@ If the optional category is provided, list all the commands in the category`, }, { Command: "users", - Module: utils.ACLModule, - Categories: []string{utils.AdminCategory, utils.SlowCategory, utils.DangerousCategory}, + Module: constants.ACLModule, + Categories: []string{constants.AdminCategory, constants.SlowCategory, constants.DangerousCategory}, Description: "(ACL USERS) List all usernames of the configured ACL users", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { @@ -537,8 +538,8 @@ If the optional category is provided, list all the commands in the category`, }, { Command: "setuser", - Module: utils.ACLModule, - Categories: []string{utils.AdminCategory, utils.SlowCategory, utils.DangerousCategory}, + Module: constants.ACLModule, + Categories: []string{constants.AdminCategory, constants.SlowCategory, constants.DangerousCategory}, Description: "(ACL SETUSER) Configure a new or existing user", Sync: true, KeyExtractionFunc: func(cmd []string) ([]string, error) { @@ -548,8 +549,8 @@ If the optional category is provided, list all the commands in the category`, }, { Command: "getuser", - Module: utils.ACLModule, - Categories: []string{utils.AdminCategory, utils.SlowCategory, utils.DangerousCategory}, + Module: constants.ACLModule, + Categories: []string{constants.AdminCategory, constants.SlowCategory, constants.DangerousCategory}, Description: "(ACL GETUSER username) List the ACL rules of a user", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { @@ -559,8 +560,8 @@ If the optional category is provided, list all the commands in the category`, }, { Command: "deluser", - Module: utils.ACLModule, - Categories: []string{utils.AdminCategory, utils.SlowCategory, utils.DangerousCategory}, + Module: constants.ACLModule, + Categories: []string{constants.AdminCategory, constants.SlowCategory, constants.DangerousCategory}, Description: "(ACL DELUSER username [username ...]) Deletes users and terminates their connections. Cannot delete default user", Sync: true, KeyExtractionFunc: func(cmd []string) ([]string, error) { @@ -570,8 +571,8 @@ If the optional category is provided, list all the commands in the category`, }, { Command: "whoami", - Module: utils.ACLModule, - Categories: []string{utils.FastCategory}, + Module: constants.ACLModule, + Categories: []string{constants.FastCategory}, Description: "(ACL WHOAMI) Returns the authenticated user of the current connection", Sync: true, KeyExtractionFunc: func(cmd []string) ([]string, error) { @@ -581,8 +582,8 @@ If the optional category is provided, list all the commands in the category`, }, { Command: "list", - Module: utils.ACLModule, - Categories: []string{utils.AdminCategory, utils.SlowCategory, utils.DangerousCategory}, + Module: constants.ACLModule, + Categories: []string{constants.AdminCategory, constants.SlowCategory, constants.DangerousCategory}, Description: "(ACL LIST) Dumps effective acl rules in acl config file format", Sync: true, KeyExtractionFunc: func(cmd []string) ([]string, error) { @@ -592,8 +593,8 @@ If the optional category is provided, list all the commands in the category`, }, { Command: "load", - Module: utils.ACLModule, - Categories: []string{utils.AdminCategory, utils.SlowCategory, utils.DangerousCategory}, + Module: constants.ACLModule, + Categories: []string{constants.AdminCategory, constants.SlowCategory, constants.DangerousCategory}, Description: ` (ACL LOAD ) Reloads the rules from the configured ACL config file. When 'MERGE' is passed, users from config file who share a username with users in memory will be merged. @@ -606,8 +607,8 @@ When 'REPLACE' is passed, users from config file who share a username with users }, { Command: "save", - Module: utils.ACLModule, - Categories: []string{utils.AdminCategory, utils.SlowCategory, utils.DangerousCategory}, + Module: constants.ACLModule, + Categories: []string{constants.AdminCategory, constants.SlowCategory, constants.DangerousCategory}, Description: "(ACL SAVE) Saves the effective ACL rules the configured ACL config file", Sync: true, KeyExtractionFunc: func(cmd []string) ([]string, error) { diff --git a/pkg/modules/acl/commands_test.go b/pkg/modules/acl/commands_test.go index 3bd10b1..8724049 100644 --- a/pkg/modules/acl/commands_test.go +++ b/pkg/modules/acl/commands_test.go @@ -19,8 +19,8 @@ import ( "fmt" internal_acl "github.com/echovault/echovault/internal/acl" "github.com/echovault/echovault/internal/config" + "github.com/echovault/echovault/pkg/constants" "github.com/echovault/echovault/pkg/echovault" - "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" "net" "slices" @@ -48,7 +48,7 @@ func setUpServer(bindAddr string, port uint16, requirePass bool, aclConfig strin BindAddr: bindAddr, Port: port, DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, RequirePass: requirePass, Password: "password1", AclConfig: aclConfig, @@ -248,7 +248,7 @@ func Test_HandleAuth(t *testing.T) { { // 7. Command too short cmd: []resp.Value{resp.StringValue("AUTH")}, wantRes: "", - wantErr: fmt.Sprintf("Error %s", utils.WrongArgsResponse), + wantErr: fmt.Sprintf("Error %s", constants.WrongArgsResponse), }, { // 8. Command too long cmd: []resp.Value{ @@ -258,7 +258,7 @@ func Test_HandleAuth(t *testing.T) { resp.StringValue("password2"), }, wantRes: "", - wantErr: fmt.Sprintf("Error %s", utils.WrongArgsResponse), + wantErr: fmt.Sprintf("Error %s", constants.WrongArgsResponse), }, } @@ -314,36 +314,36 @@ func Test_HandleCat(t *testing.T) { { // 1. Return list of categories cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("CAT")}, wantRes: []string{ - utils.ConnectionCategory, - utils.SlowCategory, - utils.FastCategory, - utils.AdminCategory, - utils.DangerousCategory, + constants.ConnectionCategory, + constants.SlowCategory, + constants.FastCategory, + constants.AdminCategory, + constants.DangerousCategory, }, wantErr: "", }, { // 2. Return list of commands in connection category - cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("CAT"), resp.StringValue(utils.ConnectionCategory)}, + cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("CAT"), resp.StringValue(constants.ConnectionCategory)}, wantRes: []string{"auth"}, wantErr: "", }, { // 3. Return list of commands in slow category - cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("CAT"), resp.StringValue(utils.SlowCategory)}, + cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("CAT"), resp.StringValue(constants.SlowCategory)}, wantRes: []string{"auth", "acl|cat", "acl|users", "acl|setuser", "acl|getuser", "acl|deluser", "acl|list", "acl|load", "acl|save"}, wantErr: "", }, { // 4. Return list of commands in fast category - cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("CAT"), resp.StringValue(utils.FastCategory)}, + cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("CAT"), resp.StringValue(constants.FastCategory)}, wantRes: []string{"acl|whoami"}, wantErr: "", }, { // 5. Return list of commands in admin category - cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("CAT"), resp.StringValue(utils.AdminCategory)}, + cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("CAT"), resp.StringValue(constants.AdminCategory)}, wantRes: []string{"acl|users", "acl|setuser", "acl|getuser", "acl|deluser", "acl|list", "acl|load", "acl|save"}, wantErr: "", }, { // 6. Return list of commands in dangerous category - cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("CAT"), resp.StringValue(utils.DangerousCategory)}, + cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("CAT"), resp.StringValue(constants.DangerousCategory)}, wantRes: []string{"acl|users", "acl|setuser", "acl|getuser", "acl|deluser", "acl|list", "acl|load", "acl|save"}, wantErr: "", }, @@ -355,7 +355,7 @@ func Test_HandleCat(t *testing.T) { { // 8. Command too long cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("CAT"), resp.StringValue("category1"), resp.StringValue("category2")}, wantRes: nil, - wantErr: fmt.Sprintf("Error %s", utils.WrongArgsResponse), + wantErr: fmt.Sprintf("Error %s", constants.WrongArgsResponse), }, } @@ -640,20 +640,20 @@ func Test_HandleSetUser(t *testing.T) { resp.StringValue("SETUSER"), resp.StringValue("set_user_8"), resp.StringValue("on"), - resp.StringValue(fmt.Sprintf("+@%s", utils.WriteCategory)), - resp.StringValue(fmt.Sprintf("+@%s", utils.ReadCategory)), - resp.StringValue(fmt.Sprintf("+@%s", utils.PubSubCategory)), - resp.StringValue(fmt.Sprintf("-@%s", utils.AdminCategory)), - resp.StringValue(fmt.Sprintf("-@%s", utils.ConnectionCategory)), - resp.StringValue(fmt.Sprintf("-@%s", utils.DangerousCategory)), + resp.StringValue(fmt.Sprintf("+@%s", constants.WriteCategory)), + resp.StringValue(fmt.Sprintf("+@%s", constants.ReadCategory)), + resp.StringValue(fmt.Sprintf("+@%s", constants.PubSubCategory)), + resp.StringValue(fmt.Sprintf("-@%s", constants.AdminCategory)), + resp.StringValue(fmt.Sprintf("-@%s", constants.ConnectionCategory)), + resp.StringValue(fmt.Sprintf("-@%s", constants.DangerousCategory)), }, wantRes: "OK", wantErr: "", wantUser: func() *internal_acl.User { user := internal_acl.CreateUser("set_user_8") user.Enabled = true - user.IncludedCategories = []string{utils.WriteCategory, utils.ReadCategory, utils.PubSubCategory} - user.ExcludedCategories = []string{utils.AdminCategory, utils.ConnectionCategory, utils.DangerousCategory} + user.IncludedCategories = []string{constants.WriteCategory, constants.ReadCategory, constants.PubSubCategory} + user.ExcludedCategories = []string{constants.AdminCategory, constants.ConnectionCategory, constants.DangerousCategory} user.Normalise() return user }(), @@ -1065,8 +1065,8 @@ func Test_HandleGetUser(t *testing.T) { {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "get_user_password_1"}, {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("get_user_password_2")}, }, - IncludedCategories: []string{utils.WriteCategory, utils.ReadCategory, utils.PubSubCategory}, - ExcludedCategories: []string{utils.AdminCategory, utils.ConnectionCategory, utils.DangerousCategory}, + IncludedCategories: []string{constants.WriteCategory, constants.ReadCategory, constants.PubSubCategory}, + ExcludedCategories: []string{constants.AdminCategory, constants.ConnectionCategory, constants.DangerousCategory}, IncludedCommands: []string{"acl|setuser", "acl|getuser", "acl|deluser"}, ExcludedCommands: []string{"rewriteaof", "save", "acl|load", "acl|save"}, IncludedReadKeys: []string{"key1", "key2", "key3", "key4"}, @@ -1084,12 +1084,12 @@ func Test_HandleGetUser(t *testing.T) { }), resp.StringValue("categories"), resp.ArrayValue([]resp.Value{ - resp.StringValue(fmt.Sprintf("+@%s", utils.WriteCategory)), - resp.StringValue(fmt.Sprintf("+@%s", utils.ReadCategory)), - resp.StringValue(fmt.Sprintf("+@%s", utils.PubSubCategory)), - resp.StringValue(fmt.Sprintf("-@%s", utils.AdminCategory)), - resp.StringValue(fmt.Sprintf("-@%s", utils.ConnectionCategory)), - resp.StringValue(fmt.Sprintf("-@%s", utils.DangerousCategory)), + resp.StringValue(fmt.Sprintf("+@%s", constants.WriteCategory)), + resp.StringValue(fmt.Sprintf("+@%s", constants.ReadCategory)), + resp.StringValue(fmt.Sprintf("+@%s", constants.PubSubCategory)), + resp.StringValue(fmt.Sprintf("-@%s", constants.AdminCategory)), + resp.StringValue(fmt.Sprintf("-@%s", constants.ConnectionCategory)), + resp.StringValue(fmt.Sprintf("-@%s", constants.DangerousCategory)), }), resp.StringValue("commands"), resp.ArrayValue([]resp.Value{ @@ -1219,7 +1219,7 @@ func Test_HandleDelUser(t *testing.T) { presetUser: nil, cmd: []resp.Value{resp.StringValue("ACL"), resp.StringValue("DELUSER")}, wantRes: "", - wantErr: fmt.Sprintf("Error %s", utils.WrongArgsResponse), + wantErr: fmt.Sprintf("Error %s", constants.WrongArgsResponse), }, } @@ -1353,8 +1353,8 @@ func Test_HandleList(t *testing.T) { {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "list_user_password_1"}, {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("list_user_password_2")}, }, - IncludedCategories: []string{utils.WriteCategory, utils.ReadCategory, utils.PubSubCategory}, - ExcludedCategories: []string{utils.AdminCategory, utils.ConnectionCategory, utils.DangerousCategory}, + IncludedCategories: []string{constants.WriteCategory, constants.ReadCategory, constants.PubSubCategory}, + ExcludedCategories: []string{constants.AdminCategory, constants.ConnectionCategory, constants.DangerousCategory}, IncludedCommands: []string{"acl|setuser", "acl|getuser", "acl|deluser"}, ExcludedCommands: []string{"rewriteaof", "save", "acl|load", "acl|save"}, IncludedReadKeys: []string{"key1", "key2", "key3", "key4"}, @@ -1368,8 +1368,8 @@ func Test_HandleList(t *testing.T) { NoPassword: true, NoKeys: true, Passwords: []internal_acl.Password{}, - IncludedCategories: []string{utils.WriteCategory, utils.ReadCategory, utils.PubSubCategory}, - ExcludedCategories: []string{utils.AdminCategory, utils.ConnectionCategory, utils.DangerousCategory}, + IncludedCategories: []string{constants.WriteCategory, constants.ReadCategory, constants.PubSubCategory}, + ExcludedCategories: []string{constants.AdminCategory, constants.ConnectionCategory, constants.DangerousCategory}, IncludedCommands: []string{"acl|setuser", "acl|getuser", "acl|deluser"}, ExcludedCommands: []string{"rewriteaof", "save", "acl|load", "acl|save"}, IncludedReadKeys: []string{}, @@ -1386,8 +1386,8 @@ func Test_HandleList(t *testing.T) { {PasswordType: internal_acl.PasswordPlainText, PasswordValue: "list_user_password_3"}, {PasswordType: internal_acl.PasswordSHA256, PasswordValue: generateSHA256Password("list_user_password_4")}, }, - IncludedCategories: []string{utils.WriteCategory, utils.ReadCategory, utils.PubSubCategory}, - ExcludedCategories: []string{utils.AdminCategory, utils.ConnectionCategory, utils.DangerousCategory}, + IncludedCategories: []string{constants.WriteCategory, constants.ReadCategory, constants.PubSubCategory}, + ExcludedCategories: []string{constants.AdminCategory, constants.ConnectionCategory, constants.DangerousCategory}, IncludedCommands: []string{"acl|setuser", "acl|getuser", "acl|deluser"}, ExcludedCommands: []string{"rewriteaof", "save", "acl|load", "acl|save"}, IncludedReadKeys: []string{"key1", "key2", "key3", "key4"}, diff --git a/pkg/modules/admin/commands.go b/pkg/modules/admin/commands.go index 1bcfb35..3f2d126 100644 --- a/pkg/modules/admin/commands.go +++ b/pkg/modules/admin/commands.go @@ -18,14 +18,15 @@ import ( "context" "errors" "fmt" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "github.com/gobwas/glob" "net" "slices" "strings" ) -func handleGetAllCommands(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleGetAllCommands(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { commands := server.GetAllCommands() res := "" @@ -70,7 +71,7 @@ func handleGetAllCommands(ctx context.Context, cmd []string, server utils.EchoVa return []byte(res), nil } -func handleCommandCount(_ context.Context, _ []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleCommandCount(_ context.Context, _ []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { var count int commands := server.GetAllCommands() @@ -87,7 +88,7 @@ func handleCommandCount(_ context.Context, _ []string, server utils.EchoVault, _ return []byte(fmt.Sprintf(":%d\r\n", count)), nil } -func handleCommandList(_ context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleCommandList(_ context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { switch len(cmd) { case 2: // Command is COMMAND LIST @@ -182,20 +183,20 @@ func handleCommandList(_ context.Context, cmd []string, server utils.EchoVault, res = fmt.Sprintf("*%d\r\n%s", count, res) return []byte(res), nil default: - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } } -func handleCommandDocs(_ context.Context, _ []string, _ utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleCommandDocs(_ context.Context, _ []string, _ types.EchoVault, _ *net.Conn) ([]byte, error) { return []byte("*0\r\n"), nil } -func Commands() []utils.Command { - return []utils.Command{ +func Commands() []types.Command { + return []types.Command{ { Command: "commands", - Module: utils.AdminModule, - Categories: []string{utils.AdminCategory, utils.SlowCategory}, + Module: constants.AdminModule, + Categories: []string{constants.AdminCategory, constants.SlowCategory}, Description: "Get a list of all the commands in available on the echovault with categories and descriptions", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { return []string{}, nil }, @@ -203,18 +204,18 @@ func Commands() []utils.Command { }, { Command: "command", - Module: utils.AdminModule, + Module: constants.AdminModule, Categories: []string{}, Description: "Commands pertaining to echovault commands", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { return []string{}, nil }, - SubCommands: []utils.SubCommand{ + SubCommands: []types.SubCommand{ { Command: "docs", - Module: utils.AdminModule, - Categories: []string{utils.SlowCategory, utils.ConnectionCategory}, + Module: constants.AdminModule, + Categories: []string{constants.SlowCategory, constants.ConnectionCategory}, Description: "Get command documentation", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { return []string{}, nil }, @@ -222,8 +223,8 @@ func Commands() []utils.Command { }, { Command: "count", - Module: utils.AdminModule, - Categories: []string{utils.SlowCategory}, + Module: constants.AdminModule, + Categories: []string{constants.SlowCategory}, Description: "Get the dumber of commands in the echovault", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { return []string{}, nil }, @@ -231,8 +232,8 @@ func Commands() []utils.Command { }, { Command: "list", - Module: utils.AdminModule, - Categories: []string{utils.SlowCategory}, + Module: constants.AdminModule, + Categories: []string{constants.SlowCategory}, Description: `(COMMAND LIST [FILTERBY ]) Get the list of command names. Allows for filtering by ACL category or glob pattern.`, Sync: false, @@ -243,30 +244,30 @@ Allows for filtering by ACL category or glob pattern.`, }, { Command: "save", - Module: utils.AdminModule, - Categories: []string{utils.AdminCategory, utils.SlowCategory, utils.DangerousCategory}, + Module: constants.AdminModule, + Categories: []string{constants.AdminCategory, constants.SlowCategory, constants.DangerousCategory}, Description: "(SAVE) Trigger a snapshot save", Sync: true, KeyExtractionFunc: func(cmd []string) ([]string, error) { return []string{}, nil }, - HandlerFunc: func(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { + HandlerFunc: func(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { if err := server.TakeSnapshot(); err != nil { return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil }, }, { Command: "lastsave", - Module: utils.AdminModule, - Categories: []string{utils.AdminCategory, utils.FastCategory, utils.DangerousCategory}, + Module: constants.AdminModule, + Categories: []string{constants.AdminCategory, constants.FastCategory, constants.DangerousCategory}, Description: "(LASTSAVE) Get unix timestamp for the latest snapshot in milliseconds.", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { return []string{}, nil }, - HandlerFunc: func(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { + HandlerFunc: func(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { msec := server.GetLatestSnapshot() if msec == 0 { return nil, errors.New("no snapshot") @@ -276,18 +277,18 @@ Allows for filtering by ACL category or glob pattern.`, }, { Command: "rewriteaof", - Module: utils.AdminModule, - Categories: []string{utils.AdminCategory, utils.SlowCategory, utils.DangerousCategory}, + Module: constants.AdminModule, + Categories: []string{constants.AdminCategory, constants.SlowCategory, constants.DangerousCategory}, Description: "(REWRITEAOF) Trigger re-writing of append process", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { return []string{}, nil }, - HandlerFunc: func(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { + HandlerFunc: func(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { if err := server.RewriteAOF(); err != nil { return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil }, }, } diff --git a/pkg/modules/admin/commands_test.go b/pkg/modules/admin/commands_test.go index 27fa0bc..bb80bca 100644 --- a/pkg/modules/admin/commands_test.go +++ b/pkg/modules/admin/commands_test.go @@ -19,8 +19,8 @@ import ( "context" "fmt" "github.com/echovault/echovault/internal/config" + "github.com/echovault/echovault/pkg/constants" "github.com/echovault/echovault/pkg/echovault" - "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" "testing" ) @@ -29,7 +29,7 @@ func Test_CommandsHandler(t *testing.T) { mockServer := echovault.NewEchoVault( echovault.WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), echovault.WithCommands(Commands()), ) diff --git a/pkg/modules/connection/commands.go b/pkg/modules/connection/commands.go index 1309b32..ae71fb3 100644 --- a/pkg/modules/connection/commands.go +++ b/pkg/modules/connection/commands.go @@ -18,14 +18,15 @@ import ( "context" "errors" "fmt" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "net" ) -func handlePing(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handlePing(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { switch len(cmd) { default: - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) case 1: return []byte("+PONG\r\n"), nil case 2: @@ -33,12 +34,12 @@ func handlePing(ctx context.Context, cmd []string, server utils.EchoVault, conn } } -func Commands() []utils.Command { - return []utils.Command{ +func Commands() []types.Command { + return []types.Command{ { Command: "connection", - Module: utils.ConnectionModule, - Categories: []string{utils.FastCategory, utils.ConnectionCategory}, + Module: constants.ConnectionModule, + Categories: []string{constants.FastCategory, constants.ConnectionCategory}, Description: "(PING [value]) Ping the echovault. If a value is provided, the value will be echoed.", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { diff --git a/pkg/modules/connection/commands_test.go b/pkg/modules/connection/commands_test.go index e7b9238..cd0e844 100644 --- a/pkg/modules/connection/commands_test.go +++ b/pkg/modules/connection/commands_test.go @@ -19,8 +19,8 @@ import ( "context" "errors" "github.com/echovault/echovault/internal/config" + "github.com/echovault/echovault/pkg/constants" "github.com/echovault/echovault/pkg/echovault" - "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" "testing" ) @@ -31,7 +31,7 @@ func init() { mockServer = echovault.NewEchoVault( echovault.WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) } @@ -57,7 +57,7 @@ func Test_HandlePing(t *testing.T) { { command: []string{"PING", "Hello, world!", "Once more"}, expected: "", - expectedErr: errors.New(utils.WrongArgsResponse), + expectedErr: errors.New(constants.WrongArgsResponse), }, } diff --git a/pkg/modules/generic/commands.go b/pkg/modules/generic/commands.go index de2477f..086ab99 100644 --- a/pkg/modules/generic/commands.go +++ b/pkg/modules/generic/commands.go @@ -20,7 +20,8 @@ import ( "flag" "fmt" "github.com/echovault/echovault/internal" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "log" "net" "strconv" @@ -48,7 +49,7 @@ type KeyObject struct { locked bool } -func handleSet(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleSet(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := setKeyFunc(cmd) if err != nil { return nil, err @@ -56,7 +57,7 @@ func handleSet(ctx context.Context, cmd []string, server utils.EchoVault, _ *net key := keys[0] value := cmd[2] - res := []byte(utils.OkResponse) + res := []byte(constants.OkResponse) params, err := getSetCommandParams(cmd[3:], SetParams{}) if err != nil { @@ -112,7 +113,7 @@ func handleSet(ctx context.Context, cmd []string, server utils.EchoVault, _ *net return res, nil } -func handleMSet(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleMSet(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { if _, err := msetKeyFunc(cmd); err != nil { return nil, err } @@ -165,10 +166,10 @@ func handleMSet(ctx context.Context, cmd []string, server utils.EchoVault, _ *ne } } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func handleGet(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleGet(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := getKeyFunc(cmd) if err != nil { return nil, err @@ -190,7 +191,7 @@ func handleGet(ctx context.Context, cmd []string, server utils.EchoVault, _ *net return []byte(fmt.Sprintf("+%v\r\n", value)), nil } -func handleMGet(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleMGet(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := mgetKeyFunc(cmd) if err != nil { return nil, err @@ -240,7 +241,7 @@ func handleMGet(ctx context.Context, cmd []string, server utils.EchoVault, _ *ne return bytes, nil } -func handleDel(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleDel(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := delKeyFunc(cmd) if err != nil { return nil, err @@ -257,7 +258,7 @@ func handleDel(ctx context.Context, cmd []string, server utils.EchoVault, _ *net return []byte(fmt.Sprintf(":%d\r\n", count)), nil } -func handlePersist(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handlePersist(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := persistKeyFunc(cmd) if err != nil { return nil, err @@ -284,7 +285,7 @@ func handlePersist(ctx context.Context, cmd []string, server utils.EchoVault, _ return []byte(":1\r\n"), nil } -func handleExpireTime(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleExpireTime(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := expireTimeKeyFunc(cmd) if err != nil { return nil, err @@ -315,7 +316,7 @@ func handleExpireTime(ctx context.Context, cmd []string, server utils.EchoVault, return []byte(fmt.Sprintf(":%d\r\n", t)), nil } -func handleTTL(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleTTL(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := ttlKeyFunc(cmd) if err != nil { return nil, err @@ -350,7 +351,7 @@ func handleTTL(ctx context.Context, cmd []string, server utils.EchoVault, _ *net return []byte(fmt.Sprintf(":%d\r\n", t)), nil } -func handleExpire(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleExpire(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := expireKeyFunc(cmd) if err != nil { return nil, err @@ -418,7 +419,7 @@ func handleExpire(ctx context.Context, cmd []string, server utils.EchoVault, _ * return []byte(":1\r\n"), nil } -func handleExpireAt(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleExpireAt(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := expireKeyFunc(cmd) if err != nil { return nil, err @@ -486,12 +487,12 @@ func handleExpireAt(ctx context.Context, cmd []string, server utils.EchoVault, _ return []byte(":1\r\n"), nil } -func Commands() []utils.Command { - return []utils.Command{ +func Commands() []types.Command { + return []types.Command{ { Command: "set", - Module: utils.GenericModule, - Categories: []string{utils.WriteCategory, utils.SlowCategory}, + Module: constants.GenericModule, + Categories: []string{constants.WriteCategory, constants.SlowCategory}, Description: ` (SET key value [NX | XX] [GET] [EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds]) Set the value of a key, considering the value's type. @@ -508,8 +509,8 @@ PXAT - Expire at the exat time in unix milliseconds (positive integer).`, }, { Command: "mset", - Module: utils.GenericModule, - Categories: []string{utils.WriteCategory, utils.SlowCategory}, + Module: constants.GenericModule, + Categories: []string{constants.WriteCategory, constants.SlowCategory}, Description: "(MSET key value [key value ...]) Automatically generic or modify multiple key/value pairs.", Sync: true, KeyExtractionFunc: msetKeyFunc, @@ -517,8 +518,8 @@ PXAT - Expire at the exat time in unix milliseconds (positive integer).`, }, { Command: "get", - Module: utils.GenericModule, - Categories: []string{utils.ReadCategory, utils.FastCategory}, + Module: constants.GenericModule, + Categories: []string{constants.ReadCategory, constants.FastCategory}, Description: "(GET key) Get the value at the specified key.", Sync: false, KeyExtractionFunc: getKeyFunc, @@ -526,8 +527,8 @@ PXAT - Expire at the exat time in unix milliseconds (positive integer).`, }, { Command: "mget", - Module: utils.GenericModule, - Categories: []string{utils.ReadCategory, utils.FastCategory}, + Module: constants.GenericModule, + Categories: []string{constants.ReadCategory, constants.FastCategory}, Description: "(MGET key [key ...]) Get multiple values from the specified keys.", Sync: false, KeyExtractionFunc: mgetKeyFunc, @@ -535,8 +536,8 @@ PXAT - Expire at the exat time in unix milliseconds (positive integer).`, }, { Command: "del", - Module: utils.GenericModule, - Categories: []string{utils.KeyspaceCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.GenericModule, + Categories: []string{constants.KeyspaceCategory, constants.WriteCategory, constants.FastCategory}, Description: "(DEL key [key ...]) Removes one or more keys from the store.", Sync: true, KeyExtractionFunc: delKeyFunc, @@ -544,8 +545,8 @@ PXAT - Expire at the exat time in unix milliseconds (positive integer).`, }, { Command: "persist", - Module: utils.GenericModule, - Categories: []string{utils.KeyspaceCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.GenericModule, + Categories: []string{constants.KeyspaceCategory, constants.WriteCategory, constants.FastCategory}, Description: `(PERSIST key) Removes the TTl associated with a key, turning it from a volatile key to a persistent key.`, Sync: true, @@ -554,8 +555,8 @@ turning it from a volatile key to a persistent key.`, }, { Command: "expiretime", - Module: utils.GenericModule, - Categories: []string{utils.KeyspaceCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.GenericModule, + Categories: []string{constants.KeyspaceCategory, constants.ReadCategory, constants.FastCategory}, Description: `(EXPIRETIME key) Returns the absolute unix time in seconds when the key will expire. Return -1 if the key exists but has no associated expiry time. Returns -2 if the key does not exist.`, @@ -565,8 +566,8 @@ Returns -2 if the key does not exist.`, }, { Command: "pexpiretime", - Module: utils.GenericModule, - Categories: []string{utils.KeyspaceCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.GenericModule, + Categories: []string{constants.KeyspaceCategory, constants.ReadCategory, constants.FastCategory}, Description: `(PEXPIRETIME key) Returns the absolute unix time in milliseconds when the key will expire. Return -1 if the key exists but has no associated expiry time. Returns -2 if the key does not exist.`, @@ -576,8 +577,8 @@ Returns -2 if the key does not exist.`, }, { Command: "ttl", - Module: utils.GenericModule, - Categories: []string{utils.KeyspaceCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.GenericModule, + Categories: []string{constants.KeyspaceCategory, constants.ReadCategory, constants.FastCategory}, Description: `(TTL key) Returns the remaining time to live for a key that has an expiry time in seconds. If the key exists but does not have an associated expiry time, -1 is returned. If the key does not exist, -2 is returned.`, @@ -587,8 +588,8 @@ If the key does not exist, -2 is returned.`, }, { Command: "pttl", - Module: utils.GenericModule, - Categories: []string{utils.KeyspaceCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.GenericModule, + Categories: []string{constants.KeyspaceCategory, constants.ReadCategory, constants.FastCategory}, Description: `(PTTL key) Returns the remaining time to live for a key that has an expiry time in milliseconds. If the key exists but does not have an associated expiry time, -1 is returned. If the key does not exist, -2 is returned.`, @@ -598,8 +599,8 @@ If the key does not exist, -2 is returned.`, }, { Command: "expire", - Module: utils.GenericModule, - Categories: []string{utils.KeyspaceCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.GenericModule, + Categories: []string{constants.KeyspaceCategory, constants.WriteCategory, constants.FastCategory}, Description: `(EXPIRE key seconds [NX | XX | GT | LT]) Expire the key in the specified number of seconds. This commands turns a key into a volatile one. NX - Only set the expiry time if the key has no associated expiry. @@ -612,8 +613,8 @@ LT - Only set the expiry time if the new expiry time is less than the current on }, { Command: "pexpire", - Module: utils.GenericModule, - Categories: []string{utils.KeyspaceCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.GenericModule, + Categories: []string{constants.KeyspaceCategory, constants.WriteCategory, constants.FastCategory}, Description: `(PEXPIRE key milliseconds [NX | XX | GT | LT]) Expire the key in the specified number of milliseconds. This commands turns a key into a volatile one. NX - Only set the expiry time if the key has no associated expiry. @@ -626,8 +627,8 @@ LT - Only set the expiry time if the new expiry time is less than the current on }, { Command: "expireat", - Module: utils.GenericModule, - Categories: []string{utils.KeyspaceCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.GenericModule, + Categories: []string{constants.KeyspaceCategory, constants.WriteCategory, constants.FastCategory}, Description: `(EXPIREAT key unix-time-seconds [NX | XX | GT | LT]) Expire the key in at the exact unix time in seconds. This commands turns a key into a volatile one. @@ -641,8 +642,8 @@ LT - Only set the expiry time if the new expiry time is less than the current on }, { Command: "pexpireat", - Module: utils.GenericModule, - Categories: []string{utils.KeyspaceCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.GenericModule, + Categories: []string{constants.KeyspaceCategory, constants.WriteCategory, constants.FastCategory}, Description: `(PEXPIREAT key unix-time-milliseconds [NX | XX | GT | LT]) Expire the key in at the exact unix time in milliseconds. This commands turns a key into a volatile one. diff --git a/pkg/modules/generic/commands_test.go b/pkg/modules/generic/commands_test.go index ba93a35..7a1f365 100644 --- a/pkg/modules/generic/commands_test.go +++ b/pkg/modules/generic/commands_test.go @@ -20,8 +20,8 @@ import ( "errors" "fmt" "github.com/echovault/echovault/internal/config" + "github.com/echovault/echovault/pkg/constants" "github.com/echovault/echovault/pkg/echovault" - "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" "testing" "time" @@ -38,7 +38,7 @@ func init() { mockServer = echovault.NewEchoVault( echovault.WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) } @@ -309,13 +309,13 @@ func Test_HandleSET(t *testing.T) { command: []string{"SET"}, expectedResponse: nil, expectedValue: nil, - expectedErr: errors.New(utils.WrongArgsResponse), + expectedErr: errors.New(constants.WrongArgsResponse), }, { // 30. Command too long command: []string{"SET", "SetKey30", "value1", "value2", "value3", "value4", "value5", "value6"}, expectedResponse: nil, expectedValue: nil, - expectedErr: errors.New(utils.WrongArgsResponse), + expectedErr: errors.New(constants.WrongArgsResponse), }, } @@ -524,11 +524,11 @@ func Test_HandleGET(t *testing.T) { }{ { command: []string{"GET"}, - expected: utils.WrongArgsResponse, + expected: constants.WrongArgsResponse, }, { command: []string{"GET", "GetKey1", "test"}, - expected: utils.WrongArgsResponse, + expected: constants.WrongArgsResponse, }, } for _, test := range errorTests { @@ -569,7 +569,7 @@ func Test_HandleMGET(t *testing.T) { presetValues: []string{"value5"}, command: []string{"MGET"}, expected: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -650,7 +650,7 @@ func Test_HandleDEL(t *testing.T) { presetValues: nil, expectedResponse: 0, expectToExist: nil, - expectedErr: errors.New(utils.WrongArgsResponse), + expectedErr: errors.New(constants.WrongArgsResponse), }, } @@ -745,14 +745,14 @@ func Test_HandlePERSIST(t *testing.T) { presetValues: nil, expectedResponse: 0, expectedValues: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 5. Command too long command: []string{"PERSIST", "PersistKey5", "key6"}, presetValues: nil, expectedResponse: 0, expectedValues: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -858,13 +858,13 @@ func Test_HandleEXPIRETIME(t *testing.T) { command: []string{"PEXPIRETIME"}, presetValues: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 6. Command too long command: []string{"PEXPIRETIME", "ExpireTimeKey5", "ExpireTimeKey6"}, presetValues: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -951,13 +951,13 @@ func Test_HandleTTL(t *testing.T) { command: []string{"TTL"}, presetValues: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 6. Command too long command: []string{"TTL", "TTLKey5", "TTLKey6"}, presetValues: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1164,14 +1164,14 @@ func Test_HandleEXPIRE(t *testing.T) { presetValues: nil, expectedResponse: 0, expectedValues: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 16. Command too long command: []string{"EXPIRE", "ExpireKey16", "10", "NX", "GT"}, presetValues: nil, expectedResponse: 0, expectedValues: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1421,14 +1421,14 @@ func Test_HandleEXPIREAT(t *testing.T) { presetValues: nil, expectedResponse: 0, expectedValues: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 16. Command too long command: []string{"EXPIREAT", "ExpireAtKey16", "10", "NX", "GT"}, presetValues: nil, expectedResponse: 0, expectedValues: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } diff --git a/pkg/modules/generic/key_funcs.go b/pkg/modules/generic/key_funcs.go index dfbbd6f..8cf8131 100644 --- a/pkg/modules/generic/key_funcs.go +++ b/pkg/modules/generic/key_funcs.go @@ -16,12 +16,12 @@ package generic import ( "errors" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" ) func setKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 || len(cmd) > 7 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } @@ -41,56 +41,56 @@ func msetKeyFunc(cmd []string) ([]string, error) { func getKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func mgetKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func delKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func persistKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func expireTimeKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func ttlKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func expireKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 || len(cmd) > 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func expireAtKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 || len(cmd) > 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } diff --git a/pkg/modules/hash/commands.go b/pkg/modules/hash/commands.go index 6cd57a8..a977286 100644 --- a/pkg/modules/hash/commands.go +++ b/pkg/modules/hash/commands.go @@ -19,7 +19,8 @@ import ( "errors" "fmt" "github.com/echovault/echovault/internal" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "math/rand" "net" "slices" @@ -27,7 +28,7 @@ import ( "strings" ) -func handleHSET(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleHSET(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := hsetKeyFunc(cmd) if err != nil { return nil, err @@ -85,7 +86,7 @@ func handleHSET(ctx context.Context, cmd []string, server utils.EchoVault, _ *ne return []byte(fmt.Sprintf(":%d\r\n", count)), nil } -func handleHGET(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleHGET(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := hgetKeyFunc(cmd) if err != nil { return nil, err @@ -136,7 +137,7 @@ func handleHGET(ctx context.Context, cmd []string, server utils.EchoVault, _ *ne return []byte(res), nil } -func handleHSTRLEN(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleHSTRLEN(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := hstrlenKeyFunc(cmd) if err != nil { return nil, err @@ -187,7 +188,7 @@ func handleHSTRLEN(ctx context.Context, cmd []string, server utils.EchoVault, co return []byte(res), nil } -func handleHVALS(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleHVALS(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := hvalsKeyFunc(cmd) if err != nil { return nil, err @@ -228,7 +229,7 @@ func handleHVALS(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(res), nil } -func handleHRANDFIELD(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleHRANDFIELD(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := hrandfieldKeyFunc(cmd) if err != nil { return nil, err @@ -344,7 +345,7 @@ func handleHRANDFIELD(ctx context.Context, cmd []string, server utils.EchoVault, return []byte(res), nil } -func handleHLEN(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleHLEN(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := hlenKeyFunc(cmd) if err != nil { return nil, err @@ -369,7 +370,7 @@ func handleHLEN(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(fmt.Sprintf(":%d\r\n", len(hash))), nil } -func handleHKEYS(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleHKEYS(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := hkeysKeyFunc(cmd) if err != nil { return nil, err @@ -399,7 +400,7 @@ func handleHKEYS(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(res), nil } -func handleHINCRBY(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleHINCRBY(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := hincrbyKeyFunc(cmd) if err != nil { return nil, err @@ -491,7 +492,7 @@ func handleHINCRBY(ctx context.Context, cmd []string, server utils.EchoVault, co return []byte(fmt.Sprintf(":%d\r\n", i)), nil } -func handleHGETALL(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleHGETALL(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := hgetallKeyFunc(cmd) if err != nil { return nil, err @@ -531,7 +532,7 @@ func handleHGETALL(ctx context.Context, cmd []string, server utils.EchoVault, co return []byte(res), nil } -func handleHEXISTS(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleHEXISTS(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := hexistsKeyFunc(cmd) if err != nil { return nil, err @@ -561,7 +562,7 @@ func handleHEXISTS(ctx context.Context, cmd []string, server utils.EchoVault, co return []byte(":0\r\n"), nil } -func handleHDEL(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleHDEL(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := hdelKeyFunc(cmd) if err != nil { return nil, err @@ -600,12 +601,12 @@ func handleHDEL(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(fmt.Sprintf(":%d\r\n", count)), nil } -func Commands() []utils.Command { - return []utils.Command{ +func Commands() []types.Command { + return []types.Command{ { Command: "hset", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.WriteCategory, constants.FastCategory}, Description: `(HSET key field value [field value ...]) Set update each field of the hash with the corresponding value`, Sync: true, KeyExtractionFunc: hsetKeyFunc, @@ -613,8 +614,8 @@ func Commands() []utils.Command { }, { Command: "hsetnx", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.WriteCategory, constants.FastCategory}, Description: `(HSETNX key field value [field value ...]) Set hash field value only if the field does not exist`, Sync: true, KeyExtractionFunc: hsetnxKeyFunc, @@ -622,8 +623,8 @@ func Commands() []utils.Command { }, { Command: "hget", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.ReadCategory, constants.FastCategory}, Description: `(HGET key field [field ...]) Retrieve the value of each of the listed fields from the hash`, Sync: false, KeyExtractionFunc: hgetKeyFunc, @@ -631,8 +632,8 @@ func Commands() []utils.Command { }, { Command: "hstrlen", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.ReadCategory, constants.FastCategory}, Description: `(HSTRLEN key field [field ...]) Return the string length of the values stored at the specified fields. 0 if the value does not exist`, Sync: false, @@ -641,8 +642,8 @@ Return the string length of the values stored at the specified fields. 0 if the }, { Command: "hvals", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(HVALS key) Returns all the values of the hash at key.`, Sync: false, KeyExtractionFunc: hvalsKeyFunc, @@ -650,8 +651,8 @@ Return the string length of the values stored at the specified fields. 0 if the }, { Command: "hrandfield", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(HRANDFIELD key [count [WITHVALUES]]) Returns one or more random fields from the hash`, Sync: false, KeyExtractionFunc: hrandfieldKeyFunc, @@ -659,8 +660,8 @@ Return the string length of the values stored at the specified fields. 0 if the }, { Command: "hlen", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.ReadCategory, constants.FastCategory}, Description: `(HLEN key) Returns the number of fields in the hash`, Sync: false, KeyExtractionFunc: hlenKeyFunc, @@ -668,8 +669,8 @@ Return the string length of the values stored at the specified fields. 0 if the }, { Command: "hkeys", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(HKEYS key) Returns all the fields in a hash`, Sync: false, KeyExtractionFunc: hkeysKeyFunc, @@ -677,8 +678,8 @@ Return the string length of the values stored at the specified fields. 0 if the }, { Command: "hincrbyfloat", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.WriteCategory, constants.FastCategory}, Description: `(HINCRBYFLOAT key field increment) Increment the hash value by the float increment`, Sync: true, KeyExtractionFunc: hincrbyKeyFunc, @@ -686,8 +687,8 @@ Return the string length of the values stored at the specified fields. 0 if the }, { Command: "hincrby", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.WriteCategory, constants.FastCategory}, Description: `(HINCRBY key field increment) Increment the hash value by the integer increment`, Sync: true, KeyExtractionFunc: hincrbyKeyFunc, @@ -695,8 +696,8 @@ Return the string length of the values stored at the specified fields. 0 if the }, { Command: "hgetall", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(HGETALL key) Get all fields and values of a hash`, Sync: false, KeyExtractionFunc: hgetallKeyFunc, @@ -704,8 +705,8 @@ Return the string length of the values stored at the specified fields. 0 if the }, { Command: "hexists", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.ReadCategory, constants.FastCategory}, Description: `(HEXISTS key field) Returns if field is an existing field in the hash`, Sync: false, KeyExtractionFunc: hexistsKeyFunc, @@ -713,8 +714,8 @@ Return the string length of the values stored at the specified fields. 0 if the }, { Command: "hdel", - Module: utils.HashModule, - Categories: []string{utils.HashCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.HashModule, + Categories: []string{constants.HashCategory, constants.ReadCategory, constants.FastCategory}, Description: `(HDEL key field [field ...]) Deletes the specified fields from the hash`, Sync: true, KeyExtractionFunc: hdelKeyFunc, diff --git a/pkg/modules/hash/commands_test.go b/pkg/modules/hash/commands_test.go index 67661ac..0e70a56 100644 --- a/pkg/modules/hash/commands_test.go +++ b/pkg/modules/hash/commands_test.go @@ -20,8 +20,8 @@ import ( "errors" "fmt" "github.com/echovault/echovault/internal/config" + "github.com/echovault/echovault/pkg/constants" "github.com/echovault/echovault/pkg/echovault" - "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" "slices" "testing" @@ -33,7 +33,7 @@ func init() { mockServer = echovault.NewEchoVault( echovault.WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) } @@ -119,7 +119,7 @@ func Test_HandleHSET(t *testing.T) { command: []string{"HSET", "field1"}, expectedResponse: 0, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -219,7 +219,7 @@ func Test_HandleHINCRBY(t *testing.T) { command: []string{"HINCRBY", "HincrbyKey5"}, expectedResponse: 0, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -228,7 +228,7 @@ func Test_HandleHINCRBY(t *testing.T) { command: []string{"HINCRBY", "HincrbyKey6", "field1", "23", "45"}, expectedResponse: 0, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Error when increment by float does not pass valid float preset: false, @@ -364,7 +364,7 @@ func Test_HandleHGET(t *testing.T) { command: []string{"HGET", "HgetKey4"}, expectedResponse: 0, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -457,7 +457,7 @@ func Test_HandleHSTRLEN(t *testing.T) { command: []string{"HSTRLEN", "HstrlenKey3"}, expectedResponse: 0, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to get lengths on a non hash map returns error preset: true, @@ -545,7 +545,7 @@ func Test_HandleHVALS(t *testing.T) { command: []string{"HVALS"}, expectedResponse: nil, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -554,7 +554,7 @@ func Test_HandleHVALS(t *testing.T) { command: []string{"HVALS", "HvalsKey4", "HvalsKey4"}, expectedResponse: nil, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to get lengths on a non hash map returns error preset: true, @@ -729,14 +729,14 @@ func Test_HandleHRANDFIELD(t *testing.T) { key: "HrandfieldKey10", presetValue: map[string]interface{}{}, command: []string{"HRANDFIELD"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, key: "HrandfieldKey11", presetValue: map[string]interface{}{}, command: []string{"HRANDFIELD", "HrandfieldKey11", "HrandfieldKey11", "HrandfieldKey11", "HrandfieldKey11"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to get random field on a non hash map returns error preset: true, @@ -855,7 +855,7 @@ func Test_HandleHLEN(t *testing.T) { command: []string{"HLEN"}, expectedResponse: 0, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -864,7 +864,7 @@ func Test_HandleHLEN(t *testing.T) { command: []string{"HLEN", "HlenKey4", "HlenKey4"}, expectedResponse: 0, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to get lengths on a non hash map returns error preset: true, @@ -947,7 +947,7 @@ func Test_HandleHKeys(t *testing.T) { command: []string{"HKEYS"}, expectedResponse: nil, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -956,7 +956,7 @@ func Test_HandleHKeys(t *testing.T) { command: []string{"HKEYS", "HkeysKey4", "HkeysKey4"}, expectedResponse: nil, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to get lengths on a non hash map returns error preset: true, @@ -1046,7 +1046,7 @@ func Test_HandleHGETALL(t *testing.T) { command: []string{"HGETALL"}, expectedResponse: nil, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -1055,7 +1055,7 @@ func Test_HandleHGETALL(t *testing.T) { command: []string{"HGETALL", "HGetAllKey4", "HGetAllKey4"}, expectedResponse: nil, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to get lengths on a non hash map returns error preset: true, @@ -1156,7 +1156,7 @@ func Test_HandleHEXISTS(t *testing.T) { command: []string{"HEXISTS", "HexistsKey3"}, expectedResponse: nil, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -1165,7 +1165,7 @@ func Test_HandleHEXISTS(t *testing.T) { command: []string{"HEXISTS", "HexistsKey4", "field1", "field2"}, expectedResponse: nil, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to get lengths on a non hash map returns error preset: true, @@ -1257,7 +1257,7 @@ func Test_HandleHDEL(t *testing.T) { command: []string{"HDEL", "HdelKey4"}, expectedResponse: nil, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to get lengths on a non hash map returns error preset: true, diff --git a/pkg/modules/hash/key_funcs.go b/pkg/modules/hash/key_funcs.go index 9d7742b..4aaed79 100644 --- a/pkg/modules/hash/key_funcs.go +++ b/pkg/modules/hash/key_funcs.go @@ -16,47 +16,47 @@ package hash import ( "errors" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" ) func hsetKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func hsetnxKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func hgetKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func hstrlenKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func hvalsKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func hrandfieldKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 || len(cmd) > 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } if len(cmd) == 2 { return cmd[1:], nil @@ -66,42 +66,42 @@ func hrandfieldKeyFunc(cmd []string) ([]string, error) { func hlenKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func hkeysKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func hincrbyKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func hgetallKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func hexistsKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func hdelKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } diff --git a/pkg/modules/list/commands.go b/pkg/modules/list/commands.go index 7eeb0b2..922ca69 100644 --- a/pkg/modules/list/commands.go +++ b/pkg/modules/list/commands.go @@ -19,14 +19,15 @@ import ( "errors" "fmt" "github.com/echovault/echovault/internal" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "math" "net" "slices" "strings" ) -func handleLLen(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleLLen(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := llenKeyFunc(cmd) if err != nil { return nil, err @@ -51,7 +52,7 @@ func handleLLen(ctx context.Context, cmd []string, server utils.EchoVault, _ *ne return nil, errors.New("LLEN command on non-list item") } -func handleLIndex(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleLIndex(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := lindexKeyFunc(cmd) if err != nil { return nil, err @@ -85,7 +86,7 @@ func handleLIndex(ctx context.Context, cmd []string, server utils.EchoVault, con return []byte(fmt.Sprintf("+%s\r\n", list[index])), nil } -func handleLRange(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleLRange(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := lrangeKeyFunc(cmd) if err != nil { return nil, err @@ -164,7 +165,7 @@ func handleLRange(ctx context.Context, cmd []string, server utils.EchoVault, con return bytes, nil } -func handleLSet(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleLSet(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := lsetKeyFunc(cmd) if err != nil { return nil, err @@ -200,10 +201,10 @@ func handleLSet(ctx context.Context, cmd []string, server utils.EchoVault, conn return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func handleLTrim(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleLTrim(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := ltrimKeyFunc(cmd) if err != nil { return nil, err @@ -243,16 +244,16 @@ func handleLTrim(ctx context.Context, cmd []string, server utils.EchoVault, conn if err = server.SetValue(ctx, key, list[start:]); err != nil { return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } if err = server.SetValue(ctx, key, list[start:end]); err != nil { return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func handleLRem(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleLRem(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := lremKeyFunc(cmd) if err != nil { return nil, err @@ -317,10 +318,10 @@ func handleLRem(ctx context.Context, cmd []string, server utils.EchoVault, conn return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func handleLMove(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleLMove(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := lmoveKeyFunc(cmd) if err != nil { return nil, err @@ -378,10 +379,10 @@ func handleLMove(ctx context.Context, cmd []string, server utils.EchoVault, conn return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func handleLPush(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleLPush(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := lpushKeyFunc(cmd) if err != nil { return nil, err @@ -424,10 +425,10 @@ func handleLPush(ctx context.Context, cmd []string, server utils.EchoVault, conn if err = server.SetValue(ctx, key, append(newElems, l...)); err != nil { return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func handleRPush(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleRPush(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := rpushKeyFunc(cmd) if err != nil { return nil, err @@ -472,10 +473,10 @@ func handleRPush(ctx context.Context, cmd []string, server utils.EchoVault, conn if err = server.SetValue(ctx, key, append(l, newElems...)); err != nil { return nil, err } - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func handlePop(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handlePop(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := popKeyFunc(cmd) if err != nil { return nil, err @@ -511,12 +512,12 @@ func handlePop(ctx context.Context, cmd []string, server utils.EchoVault, _ *net } } -func Commands() []utils.Command { - return []utils.Command{ +func Commands() []types.Command { + return []types.Command{ { Command: "lpush", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.WriteCategory, constants.FastCategory}, Description: "(LPUSH key element [element ...]) Prepends one or more values to the beginning of a list, creates the list if it does not exist.", Sync: true, KeyExtractionFunc: lpushKeyFunc, @@ -524,8 +525,8 @@ func Commands() []utils.Command { }, { Command: "lpushx", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.WriteCategory, constants.FastCategory}, Description: "(LPUSHX key element [element ...]) Prepends a value to the beginning of a list only if the list exists.", Sync: true, KeyExtractionFunc: lpushKeyFunc, @@ -533,8 +534,8 @@ func Commands() []utils.Command { }, { Command: "lpop", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.WriteCategory, constants.FastCategory}, Description: "(LPOP key) Removes and returns the first element of a list.", Sync: true, KeyExtractionFunc: popKeyFunc, @@ -542,8 +543,8 @@ func Commands() []utils.Command { }, { Command: "llen", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.ReadCategory, constants.FastCategory}, Description: "(LLEN key) Return the length of a list.", Sync: false, KeyExtractionFunc: llenKeyFunc, @@ -551,8 +552,8 @@ func Commands() []utils.Command { }, { Command: "lrange", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.ReadCategory, constants.SlowCategory}, Description: "(LRANGE key start end) Return a range of elements between the given indices.", Sync: false, KeyExtractionFunc: lrangeKeyFunc, @@ -560,8 +561,8 @@ func Commands() []utils.Command { }, { Command: "lindex", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.ReadCategory, constants.SlowCategory}, Description: "(LINDEX key index) Gets list element by index.", Sync: false, KeyExtractionFunc: lindexKeyFunc, @@ -569,8 +570,8 @@ func Commands() []utils.Command { }, { Command: "lset", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.WriteCategory, constants.SlowCategory}, Description: "(LSET key index element) Sets the value of an element in a list by its index.", Sync: true, KeyExtractionFunc: lsetKeyFunc, @@ -578,8 +579,8 @@ func Commands() []utils.Command { }, { Command: "ltrim", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.WriteCategory, constants.SlowCategory}, Description: "(LTRIM key start end) Trims a list to the specified range.", Sync: true, KeyExtractionFunc: ltrimKeyFunc, @@ -587,8 +588,8 @@ func Commands() []utils.Command { }, { Command: "lrem", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.WriteCategory, constants.SlowCategory}, Description: "(LREM key count element) Remove elements from list.", Sync: true, KeyExtractionFunc: lremKeyFunc, @@ -596,8 +597,8 @@ func Commands() []utils.Command { }, { Command: "lmove", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.WriteCategory, constants.SlowCategory}, Description: "(LMOVE source destination ) Move element from one list to the other specifying left/right for both lists.", Sync: true, KeyExtractionFunc: lmoveKeyFunc, @@ -605,8 +606,8 @@ func Commands() []utils.Command { }, { Command: "rpop", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.WriteCategory, constants.FastCategory}, Description: "(RPOP key) Removes and gets the last element in a list.", Sync: true, KeyExtractionFunc: popKeyFunc, @@ -614,8 +615,8 @@ func Commands() []utils.Command { }, { Command: "rpush", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.WriteCategory, constants.FastCategory}, Description: "(RPUSH key element [element ...]) Appends one or multiple elements to the end of a list.", Sync: true, KeyExtractionFunc: rpushKeyFunc, @@ -623,8 +624,8 @@ func Commands() []utils.Command { }, { Command: "rpushx", - Module: utils.ListModule, - Categories: []string{utils.ListCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.ListModule, + Categories: []string{constants.ListCategory, constants.WriteCategory, constants.FastCategory}, Description: "(RPUSHX key element [element ...]) Appends an element to the end of a list, only if the list exists.", Sync: true, KeyExtractionFunc: rpushKeyFunc, diff --git a/pkg/modules/list/commands_test.go b/pkg/modules/list/commands_test.go index 71e4060..a72a1a7 100644 --- a/pkg/modules/list/commands_test.go +++ b/pkg/modules/list/commands_test.go @@ -20,8 +20,8 @@ import ( "errors" "fmt" "github.com/echovault/echovault/internal/config" + "github.com/echovault/echovault/pkg/constants" "github.com/echovault/echovault/pkg/echovault" - "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" "testing" ) @@ -32,7 +32,7 @@ func init() { mockServer = echovault.NewEchoVault( echovault.WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) } @@ -72,7 +72,7 @@ func Test_HandleLLEN(t *testing.T) { command: []string{"LLEN"}, expectedResponse: 0, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -81,7 +81,7 @@ func Test_HandleLLEN(t *testing.T) { command: []string{"LLEN", "LlenKey4", "LlenKey4"}, expectedResponse: 0, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to get lengths on a non-list returns error preset: true, @@ -177,7 +177,7 @@ func Test_HandleLINDEX(t *testing.T) { command: []string{"LINDEX", "LindexKey3"}, expectedResponse: 0, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -186,7 +186,7 @@ func Test_HandleLINDEX(t *testing.T) { command: []string{"LINDEX", "LindexKey4", "0", "20"}, expectedResponse: 0, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to get element by index on a non-list returns error preset: true, @@ -312,7 +312,7 @@ func Test_HandleLRANGE(t *testing.T) { command: []string{"LRANGE", "LrangeKey5"}, expectedResponse: nil, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -321,7 +321,7 @@ func Test_HandleLRANGE(t *testing.T) { command: []string{"LRANGE", "LrangeKey6", "0", "element", "element"}, expectedResponse: nil, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Error when executing command on non-list command preset: true, @@ -468,7 +468,7 @@ func Test_HandleLSET(t *testing.T) { command: []string{"LSET", "LsetKey5"}, expectedResponse: 0, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -477,7 +477,7 @@ func Test_HandleLSET(t *testing.T) { command: []string{"LSET", "LsetKey6", "0", "element", "element"}, expectedResponse: 0, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to get element by index on a non-list returns error preset: true, @@ -619,7 +619,7 @@ func Test_HandleLTRIM(t *testing.T) { command: []string{"LTRIM", "LtrimKey5"}, expectedResponse: 0, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -628,7 +628,7 @@ func Test_HandleLTRIM(t *testing.T) { command: []string{"LTRIM", "LtrimKey6", "0", "element", "element"}, expectedResponse: 0, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to get element by index on a non-list returns error preset: true, @@ -758,7 +758,7 @@ func Test_HandleLREM(t *testing.T) { command: []string{"LREM", "LremKey5"}, expectedResponse: nil, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -767,7 +767,7 @@ func Test_HandleLREM(t *testing.T) { command: []string{"LREM", "LremKey6", "0", "element", "element"}, expectedResponse: nil, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Throw error when count is not an integer preset: false, @@ -976,7 +976,7 @@ func Test_HandleLMOVE(t *testing.T) { command: []string{"LMOVE", "source9", "destination9"}, expectedResponse: nil, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 10. Throw error when command is too long @@ -985,7 +985,7 @@ func Test_HandleLMOVE(t *testing.T) { command: []string{"LMOVE", "source10", "destination10", "LEFT", "LEFT", "RIGHT"}, expectedResponse: nil, expectedValue: map[string]interface{}{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 11. Throw error when WHEREFROM argument is not LEFT/RIGHT @@ -1105,7 +1105,7 @@ func Test_HandleLPUSH(t *testing.T) { command: []string{"LPUSH", "LpushKey5"}, expectedResponse: nil, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // LPUSHX command returns error on non-existent list preset: false, @@ -1208,7 +1208,7 @@ func Test_HandleRPUSH(t *testing.T) { command: []string{"RPUSH", "RpushKey5"}, expectedResponse: nil, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // RPUSHX command returns error on non-existent list preset: false, @@ -1302,7 +1302,7 @@ func Test_HandlePOP(t *testing.T) { command: []string{"LPOP"}, expectedResponse: 0, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, @@ -1311,7 +1311,7 @@ func Test_HandlePOP(t *testing.T) { command: []string{"LPOP", "PopKey4", "PopKey4"}, expectedResponse: 0, expectedValue: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Trying to execute LPOP from a non-list item return an error preset: true, diff --git a/pkg/modules/list/key_funcs.go b/pkg/modules/list/key_funcs.go index 38daa43..cd4e2fb 100644 --- a/pkg/modules/list/key_funcs.go +++ b/pkg/modules/list/key_funcs.go @@ -16,75 +16,75 @@ package list import ( "errors" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" ) func lpushKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func popKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func llenKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func lrangeKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func lindexKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func lsetKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func ltrimKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func lremKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func rpushKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func lmoveKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 5 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1], cmd[2]}, nil } diff --git a/pkg/modules/pubsub/commands.go b/pkg/modules/pubsub/commands.go index 1ca2eab..c2b5d4c 100644 --- a/pkg/modules/pubsub/commands.go +++ b/pkg/modules/pubsub/commands.go @@ -19,12 +19,13 @@ import ( "errors" "fmt" internal_pubsub "github.com/echovault/echovault/internal/pubsub" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "net" "strings" ) -func handleSubscribe(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSubscribe(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { pubsub, ok := server.GetPubSub().(*internal_pubsub.PubSub) if !ok { return nil, errors.New("could not load pubsub module") @@ -33,7 +34,7 @@ func handleSubscribe(ctx context.Context, cmd []string, server utils.EchoVault, channels := cmd[1:] if len(channels) == 0 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } withPattern := strings.EqualFold(cmd[0], "psubscribe") @@ -42,7 +43,7 @@ func handleSubscribe(ctx context.Context, cmd []string, server utils.EchoVault, return nil, nil } -func handleUnsubscribe(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleUnsubscribe(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { pubsub, ok := server.GetPubSub().(*internal_pubsub.PubSub) if !ok { return nil, errors.New("could not load pubsub module") @@ -55,21 +56,21 @@ func handleUnsubscribe(ctx context.Context, cmd []string, server utils.EchoVault return pubsub.Unsubscribe(ctx, conn, channels, withPattern), nil } -func handlePublish(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handlePublish(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { pubsub, ok := server.GetPubSub().(*internal_pubsub.PubSub) if !ok { return nil, errors.New("could not load pubsub module") } if len(cmd) != 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } pubsub.Publish(ctx, cmd[2], cmd[1]) - return []byte(utils.OkResponse), nil + return []byte(constants.OkResponse), nil } -func handlePubSubChannels(_ context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handlePubSubChannels(_ context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { if len(cmd) > 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } pubsub, ok := server.GetPubSub().(*internal_pubsub.PubSub) @@ -85,7 +86,7 @@ func handlePubSubChannels(_ context.Context, cmd []string, server utils.EchoVaul return pubsub.Channels(pattern), nil } -func handlePubSubNumPat(_ context.Context, _ []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handlePubSubNumPat(_ context.Context, _ []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { pubsub, ok := server.GetPubSub().(*internal_pubsub.PubSub) if !ok { return nil, errors.New("could not load pubsub module") @@ -94,7 +95,7 @@ func handlePubSubNumPat(_ context.Context, _ []string, server utils.EchoVault, _ return []byte(fmt.Sprintf(":%d\r\n", num)), nil } -func handlePubSubNumSubs(_ context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handlePubSubNumSubs(_ context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { pubsub, ok := server.GetPubSub().(*internal_pubsub.PubSub) if !ok { return nil, errors.New("could not load pubsub module") @@ -102,18 +103,18 @@ func handlePubSubNumSubs(_ context.Context, cmd []string, server utils.EchoVault return pubsub.NumSub(cmd[2:]), nil } -func Commands() []utils.Command { - return []utils.Command{ +func Commands() []types.Command { + return []types.Command{ { Command: "subscribe", - Module: utils.PubSubModule, - Categories: []string{utils.PubSubCategory, utils.ConnectionCategory, utils.SlowCategory}, + Module: constants.PubSubModule, + Categories: []string{constants.PubSubCategory, constants.ConnectionCategory, constants.SlowCategory}, Description: "(SUBSCRIBE channel [channel ...]) Subscribe to one or more channels.", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { // Treat the channels as keys if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil }, @@ -121,14 +122,14 @@ func Commands() []utils.Command { }, { Command: "psubscribe", - Module: utils.PubSubModule, - Categories: []string{utils.PubSubCategory, utils.ConnectionCategory, utils.SlowCategory}, + Module: constants.PubSubModule, + Categories: []string{constants.PubSubCategory, constants.ConnectionCategory, constants.SlowCategory}, Description: "(PSUBSCRIBE pattern [pattern ...]) Subscribe to one or more glob patterns.", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { // Treat the patterns as keys if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil }, @@ -136,14 +137,14 @@ func Commands() []utils.Command { }, { Command: "publish", - Module: utils.PubSubModule, - Categories: []string{utils.PubSubCategory, utils.FastCategory}, + Module: constants.PubSubModule, + Categories: []string{constants.PubSubCategory, constants.FastCategory}, Description: "(PUBLISH channel message) Publish a message to the specified channel.", Sync: true, KeyExtractionFunc: func(cmd []string) ([]string, error) { // Treat the channel as a key if len(cmd) != 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil }, @@ -151,8 +152,8 @@ func Commands() []utils.Command { }, { Command: "unsubscribe", - Module: utils.PubSubModule, - Categories: []string{utils.PubSubCategory, utils.ConnectionCategory, utils.SlowCategory}, + Module: constants.PubSubModule, + Categories: []string{constants.PubSubCategory, constants.ConnectionCategory, constants.SlowCategory}, Description: `(UNSUBSCRIBE [channel [channel ...]]) Unsubscribe from a list of channels. If the channel list is not provided, then the connection will be unsubscribed from all the channels that it's currently subscribe to.`, @@ -165,8 +166,8 @@ it's currently subscribe to.`, }, { Command: "punsubscribe", - Module: utils.PubSubModule, - Categories: []string{utils.PubSubCategory, utils.ConnectionCategory, utils.SlowCategory}, + Module: constants.PubSubModule, + Categories: []string{constants.PubSubCategory, constants.ConnectionCategory, constants.SlowCategory}, Description: `(PUNSUBSCRIBE [pattern [pattern ...]]) Unsubscribe from a list of channels using patterns. If the pattern list is not provided, then the connection will be unsubscribed from all the patterns that it's currently subscribe to.`, @@ -179,19 +180,19 @@ it's currently subscribe to.`, }, { Command: "pubsub", - Module: utils.PubSubModule, + Module: constants.PubSubModule, Categories: []string{}, Description: "", Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { return []string{}, nil }, - HandlerFunc: func(_ context.Context, _ []string, _ utils.EchoVault, _ *net.Conn) ([]byte, error) { + HandlerFunc: func(_ context.Context, _ []string, _ types.EchoVault, _ *net.Conn) ([]byte, error) { return nil, errors.New("provide CHANNELS, NUMPAT, or NUMSUB subcommand") }, - SubCommands: []utils.SubCommand{ + SubCommands: []types.SubCommand{ { Command: "channels", - Module: utils.PubSubModule, - Categories: []string{utils.PubSubCategory, utils.SlowCategory}, + Module: constants.PubSubModule, + Categories: []string{constants.PubSubCategory, constants.SlowCategory}, Description: `(PUBSUB CHANNELS [pattern]) Returns an array containing the list of channels that match the given pattern. If no pattern is provided, all active channels are returned. Active channels are channels with 1 or more subscribers.`, @@ -201,8 +202,8 @@ channels with 1 or more subscribers.`, }, { Command: "numpat", - Module: utils.PubSubModule, - Categories: []string{utils.PubSubCategory, utils.SlowCategory}, + Module: constants.PubSubModule, + Categories: []string{constants.PubSubCategory, constants.SlowCategory}, Description: `(PUBSUB NUMPAT) Return the number of patterns that are currently subscribed to by clients.`, Sync: false, KeyExtractionFunc: func(cmd []string) ([]string, error) { return []string{}, nil }, @@ -210,8 +211,8 @@ channels with 1 or more subscribers.`, }, { Command: "numsub", - Module: utils.PubSubModule, - Categories: []string{utils.PubSubCategory, utils.SlowCategory}, + Module: constants.PubSubModule, + Categories: []string{constants.PubSubCategory, constants.SlowCategory}, Description: `(PUBSUB NUMSUB [channel [channel ...]]) Return an array of arrays containing the provided channel name and how many clients are currently subscribed to the channel.`, Sync: false, diff --git a/pkg/modules/pubsub/commands_test.go b/pkg/modules/pubsub/commands_test.go index 9538a7a..52e20f8 100644 --- a/pkg/modules/pubsub/commands_test.go +++ b/pkg/modules/pubsub/commands_test.go @@ -20,8 +20,8 @@ import ( "fmt" "github.com/echovault/echovault/internal/config" internal_pubsub "github.com/echovault/echovault/internal/pubsub" + "github.com/echovault/echovault/pkg/constants" "github.com/echovault/echovault/pkg/echovault" - "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" "net" "slices" @@ -50,7 +50,7 @@ func setUpServer(bindAddr string, port uint16) *echovault.EchoVault { BindAddr: bindAddr, Port: port, DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) } diff --git a/pkg/modules/set/commands.go b/pkg/modules/set/commands.go index 4708aa4..8a6934d 100644 --- a/pkg/modules/set/commands.go +++ b/pkg/modules/set/commands.go @@ -20,13 +20,14 @@ import ( "fmt" "github.com/echovault/echovault/internal" set2 "github.com/echovault/echovault/internal/set" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "net" "slices" "strings" ) -func handleSADD(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSADD(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := saddKeyFunc(cmd) if err != nil { return nil, err @@ -63,7 +64,7 @@ func handleSADD(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(fmt.Sprintf(":%d\r\n", count)), nil } -func handleSCARD(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSCARD(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := scardKeyFunc(cmd) if err != nil { return nil, err @@ -90,7 +91,7 @@ func handleSCARD(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(fmt.Sprintf(":%d\r\n", cardinality)), nil } -func handleSDIFF(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSDIFF(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := sdiffKeyFunc(cmd) if err != nil { return nil, err @@ -151,7 +152,7 @@ func handleSDIFF(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(res), nil } -func handleSDIFFSTORE(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSDIFFSTORE(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := sdiffstoreKeyFunc(cmd) if err != nil { return nil, err @@ -227,7 +228,7 @@ func handleSDIFFSTORE(ctx context.Context, cmd []string, server utils.EchoVault, return []byte(res), nil } -func handleSINTER(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSINTER(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := sinterKeyFunc(cmd) if err != nil { return nil, err @@ -282,7 +283,7 @@ func handleSINTER(ctx context.Context, cmd []string, server utils.EchoVault, con return []byte(res), nil } -func handleSINTERCARD(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSINTERCARD(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := sintercardKeyFunc(cmd) if err != nil { return nil, err @@ -294,7 +295,7 @@ func handleSINTERCARD(ctx context.Context, cmd []string, server utils.EchoVault, return strings.EqualFold(s, "limit") }) if limitIdx >= 0 && limitIdx < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } if limitIdx != -1 { limitIdx += 1 @@ -349,7 +350,7 @@ func handleSINTERCARD(ctx context.Context, cmd []string, server utils.EchoVault, return []byte(fmt.Sprintf(":%d\r\n", intersect.Cardinality())), nil } -func handleSINTERSTORE(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSINTERSTORE(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := sinterstoreKeyFunc(cmd) if err != nil { return nil, err @@ -407,7 +408,7 @@ func handleSINTERSTORE(ctx context.Context, cmd []string, server utils.EchoVault return []byte(fmt.Sprintf(":%d\r\n", intersect.Cardinality())), nil } -func handleSISMEMBER(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSISMEMBER(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := sismemberKeyFunc(cmd) if err != nil { return nil, err @@ -436,7 +437,7 @@ func handleSISMEMBER(ctx context.Context, cmd []string, server utils.EchoVault, return []byte(":1\r\n"), nil } -func handleSMEMBERS(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSMEMBERS(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := smembersKeyFunc(cmd) if err != nil { return nil, err @@ -471,7 +472,7 @@ func handleSMEMBERS(ctx context.Context, cmd []string, server utils.EchoVault, c return []byte(res), nil } -func handleSMISMEMBER(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSMISMEMBER(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := smismemberKeyFunc(cmd) if err != nil { return nil, err @@ -514,7 +515,7 @@ func handleSMISMEMBER(ctx context.Context, cmd []string, server utils.EchoVault, return []byte(res), nil } -func handleSMOVE(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSMOVE(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := smoveKeyFunc(cmd) if err != nil { return nil, err @@ -568,7 +569,7 @@ func handleSMOVE(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(fmt.Sprintf(":%d\r\n", res)), nil } -func handleSPOP(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSPOP(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := spopKeyFunc(cmd) if err != nil { return nil, err @@ -612,7 +613,7 @@ func handleSPOP(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(res), nil } -func handleSRANDMEMBER(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSRANDMEMBER(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := srandmemberKeyFunc(cmd) if err != nil { return nil, err @@ -656,7 +657,7 @@ func handleSRANDMEMBER(ctx context.Context, cmd []string, server utils.EchoVault return []byte(res), nil } -func handleSREM(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSREM(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := sremKeyFunc(cmd) if err != nil { return nil, err @@ -684,7 +685,7 @@ func handleSREM(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(fmt.Sprintf(":%d\r\n", count)), nil } -func handleSUNION(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSUNION(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := sunionKeyFunc(cmd) if err != nil { return nil, err @@ -735,7 +736,7 @@ func handleSUNION(ctx context.Context, cmd []string, server utils.EchoVault, con return []byte(res), nil } -func handleSUNIONSTORE(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSUNIONSTORE(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := sunionstoreKeyFunc(cmd) if err != nil { return nil, err @@ -794,12 +795,12 @@ func handleSUNIONSTORE(ctx context.Context, cmd []string, server utils.EchoVault return []byte(fmt.Sprintf(":%d\r\n", union.Cardinality())), nil } -func Commands() []utils.Command { - return []utils.Command{ +func Commands() []types.Command { + return []types.Command{ { Command: "sadd", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.WriteCategory, constants.FastCategory}, Description: "(SADD key member [member...]) Add one or more members to the set. If the set does not exist, it's created.", Sync: true, KeyExtractionFunc: saddKeyFunc, @@ -807,8 +808,8 @@ func Commands() []utils.Command { }, { Command: "scard", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.WriteCategory, constants.FastCategory}, Description: "(SCARD key) Returns the cardinality of the set.", Sync: false, KeyExtractionFunc: scardKeyFunc, @@ -816,8 +817,8 @@ func Commands() []utils.Command { }, { Command: "sdiff", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(SDIFF key [key...]) Returns the difference between all the sets in the given keys. If the first key provided is the only valid set, then this key's set will be returned as the result. All keys that are non-existed or hold values that are not sets will be skipped.`, @@ -827,8 +828,8 @@ All keys that are non-existed or hold values that are not sets will be skipped.` }, { Command: "sdiffstore", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.WriteCategory, constants.SlowCategory}, Description: `(SDIFFSTORE destination key [key...]) Works the same as SDIFF but also stores the result at 'destination'. Returns the cardinality of the new set`, Sync: true, @@ -837,8 +838,8 @@ Returns the cardinality of the new set`, }, { Command: "sinter", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.WriteCategory, constants.SlowCategory}, Description: "(SINTER key [key...]) Returns the intersection of multiple sets.", Sync: false, KeyExtractionFunc: sinterKeyFunc, @@ -846,8 +847,8 @@ Returns the cardinality of the new set`, }, { Command: "sintercard", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.ReadCategory, constants.SlowCategory}, Description: "(SINTERCARD key [key...] [LIMIT limit]) Returns the cardinality of the intersection between multiple sets.", Sync: false, KeyExtractionFunc: sintercardKeyFunc, @@ -855,8 +856,8 @@ Returns the cardinality of the new set`, }, { Command: "sinterstore", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.WriteCategory, constants.SlowCategory}, Description: "(SINTERSTORE destination key [key...]) Stores the intersection of multiple sets at the destination key.", Sync: true, KeyExtractionFunc: sinterstoreKeyFunc, @@ -864,8 +865,8 @@ Returns the cardinality of the new set`, }, { Command: "sismember", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.ReadCategory, constants.FastCategory}, Description: "(SISMEMBER key member) Returns if member is contained in the set.", Sync: false, KeyExtractionFunc: sismemberKeyFunc, @@ -873,8 +874,8 @@ Returns the cardinality of the new set`, }, { Command: "smembers", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.ReadCategory, constants.SlowCategory}, Description: "(SMEMBERS key) Returns all members of a set.", Sync: false, KeyExtractionFunc: smembersKeyFunc, @@ -882,8 +883,8 @@ Returns the cardinality of the new set`, }, { Command: "smismember", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.ReadCategory, constants.FastCategory}, Description: "(SMISMEMBER key member [member...]) Returns if multiple members are in the set.", Sync: false, KeyExtractionFunc: smismemberKeyFunc, @@ -892,8 +893,8 @@ Returns the cardinality of the new set`, { Command: "smove", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.WriteCategory, constants.FastCategory}, Description: "(SMOVE source destination member) Moves a member from source set to destination set.", Sync: true, KeyExtractionFunc: smoveKeyFunc, @@ -901,8 +902,8 @@ Returns the cardinality of the new set`, }, { Command: "spop", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.WriteCategory, constants.SlowCategory}, Description: "(SPOP key [count]) Returns and removes one or more random members from the set.", Sync: true, KeyExtractionFunc: spopKeyFunc, @@ -910,8 +911,8 @@ Returns the cardinality of the new set`, }, { Command: "srandmember", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.ReadCategory, constants.SlowCategory}, Description: "(SRANDMEMBER key [count]) Returns one or more random members from the set without removing them.", Sync: false, KeyExtractionFunc: srandmemberKeyFunc, @@ -919,8 +920,8 @@ Returns the cardinality of the new set`, }, { Command: "srem", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.WriteCategory, constants.FastCategory}, Description: "(SREM key member [member...]) Remove one or more members from a set.", Sync: true, KeyExtractionFunc: sremKeyFunc, @@ -928,8 +929,8 @@ Returns the cardinality of the new set`, }, { Command: "sunion", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.ReadCategory, constants.SlowCategory}, Description: "(SUNION key [key...]) Returns the members of the set resulting from the union of the provided sets.", Sync: false, KeyExtractionFunc: sunionKeyFunc, @@ -937,8 +938,8 @@ Returns the cardinality of the new set`, }, { Command: "sunionstore", - Module: utils.SetModule, - Categories: []string{utils.SetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SetModule, + Categories: []string{constants.SetCategory, constants.WriteCategory, constants.SlowCategory}, Description: "(SUNIONSTORE destination key [key...]) Stores the union of the given sets into destination.", Sync: true, KeyExtractionFunc: sunionstoreKeyFunc, diff --git a/pkg/modules/set/commant_test.go b/pkg/modules/set/commant_test.go index 2ca0bf5..66ecb12 100644 --- a/pkg/modules/set/commant_test.go +++ b/pkg/modules/set/commant_test.go @@ -21,8 +21,8 @@ import ( "fmt" "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/internal/set" + "github.com/echovault/echovault/pkg/constants" "github.com/echovault/echovault/pkg/echovault" - "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" "slices" "testing" @@ -34,7 +34,7 @@ func init() { mockServer = echovault.NewEchoVault( echovault.WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) } @@ -81,7 +81,7 @@ func Test_HandleSADD(t *testing.T) { command: []string{"SADD", "SaddKey4"}, expectedValue: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -176,7 +176,7 @@ func Test_HandleSCARD(t *testing.T) { command: []string{"SCARD"}, expectedValue: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 5. Command too long preset: false, @@ -184,7 +184,7 @@ func Test_HandleSCARD(t *testing.T) { command: []string{"SCARD", "ScardKey5", "ScardKey5"}, expectedValue: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -286,7 +286,7 @@ func Test_HandleSDIFF(t *testing.T) { preset: false, command: []string{"SDIFF"}, expectedResponse: []string{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -404,7 +404,7 @@ func Test_HandleSDIFFSTORE(t *testing.T) { preset: false, command: []string{"SDIFFSTORE", "SdiffStoreDestination6"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -523,7 +523,7 @@ func Test_HandleSINTER(t *testing.T) { preset: false, command: []string{"SINTER"}, expectedResponse: []string{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -640,7 +640,7 @@ func Test_HandleSINTERCARD(t *testing.T) { preset: false, command: []string{"SINTERCARD"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -756,7 +756,7 @@ func Test_HandleSINTERSTORE(t *testing.T) { preset: false, command: []string{"SINTERSTORE", "SinterStoreDestination6"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -848,14 +848,14 @@ func Test_HandleSISMEMBER(t *testing.T) { key: "SIsMemberKey4", command: []string{"SISMEMBER", "SIsMemberKey4"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 5. Command too long preset: false, key: "SIsMemberKey5", command: []string{"SISMEMBER", "SIsMemberKey5", "one", "two", "three"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -929,13 +929,13 @@ func Test_HandleSMEMBERS(t *testing.T) { preset: false, command: []string{"SMEMBERS"}, expectedResponse: []string{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 5. Command too long preset: false, command: []string{"SMEMBERS", "SmembersKey5", "SmembersKey6"}, expectedResponse: []string{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1019,7 +1019,7 @@ func Test_HandleSMISMEMBER(t *testing.T) { key: "SmismemberKey4", command: []string{"SMISMEMBER", "SmismemberKey4"}, expectedResponse: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1127,12 +1127,12 @@ func Test_HandleSMOVE(t *testing.T) { { // 5. Command too short preset: false, command: []string{"SMOVE", "SmoveSource5", "SmoveSource6"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 6. Command too long preset: false, command: []string{"SMOVE", "SmoveSource5", "SmoveSource6", "member1", "member2"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1224,12 +1224,12 @@ func Test_HandleSPOP(t *testing.T) { { // 3. Command too short preset: false, command: []string{"SPOP"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 4. Command too long preset: false, command: []string{"SPOP", "SpopSource5", "SpopSource6", "member1", "member2"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 5. Throw error when count is not an integer preset: false, @@ -1337,12 +1337,12 @@ func Test_HandleSRANDMEMBER(t *testing.T) { { // 4. Command too short preset: false, command: []string{"SRANDMEMBER"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 5. Command too long preset: false, command: []string{"SRANDMEMBER", "SRandMemberSource5", "SRandMemberSource6", "member1", "member2"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 6. Throw error when count is not an integer preset: false, @@ -1455,7 +1455,7 @@ func Test_HandleSREM(t *testing.T) { { // 4. Command too short preset: false, command: []string{"SREM", "SremKey"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1565,7 +1565,7 @@ func Test_HandleSUNION(t *testing.T) { preset: false, command: []string{"SUNION"}, expectedResponse: []string{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1661,7 +1661,7 @@ func Test_HandleSUNIONSTORE(t *testing.T) { preset: false, command: []string{"SUNIONSTORE", "SunionStoreDestination6"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } diff --git a/pkg/modules/set/key_funcs.go b/pkg/modules/set/key_funcs.go index 6d69767..ab8bf1e 100644 --- a/pkg/modules/set/key_funcs.go +++ b/pkg/modules/set/key_funcs.go @@ -16,49 +16,49 @@ package set import ( "errors" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" "slices" "strings" ) func saddKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func scardKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func sdiffKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func sdiffstoreKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func sinterKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func sintercardKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } limitIdx := slices.IndexFunc(cmd, func(s string) bool { @@ -74,70 +74,70 @@ func sintercardKeyFunc(cmd []string) ([]string, error) { func sinterstoreKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func sismemberKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func smembersKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func smismemberKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func smoveKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:3], nil } func spopKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 || len(cmd) > 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func srandmemberKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 || len(cmd) > 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func sremKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func sunionKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func sunionstoreKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } diff --git a/pkg/modules/sorted_set/commands.go b/pkg/modules/sorted_set/commands.go index 3ce665f..2c6c04f 100644 --- a/pkg/modules/sorted_set/commands.go +++ b/pkg/modules/sorted_set/commands.go @@ -21,7 +21,8 @@ import ( "fmt" "github.com/echovault/echovault/internal" "github.com/echovault/echovault/internal/sorted_set" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "math" "net" "slices" @@ -29,7 +30,7 @@ import ( "strings" ) -func handleZADD(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZADD(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zaddKeyFunc(cmd) if err != nil { return nil, err @@ -180,7 +181,7 @@ func handleZADD(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(fmt.Sprintf(":%d\r\n", set.Cardinality())), nil } -func handleZCARD(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZCARD(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zcardKeyFunc(cmd) if err != nil { return nil, err @@ -204,7 +205,7 @@ func handleZCARD(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(fmt.Sprintf(":%d\r\n", set.Cardinality())), nil } -func handleZCOUNT(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZCOUNT(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zcountKeyFunc(cmd) if err != nil { return nil, err @@ -272,7 +273,7 @@ func handleZCOUNT(ctx context.Context, cmd []string, server utils.EchoVault, con return []byte(fmt.Sprintf(":%d\r\n", len(members))), nil } -func handleZLEXCOUNT(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleZLEXCOUNT(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := zlexcountKeyFunc(cmd) if err != nil { return nil, err @@ -317,7 +318,7 @@ func handleZLEXCOUNT(ctx context.Context, cmd []string, server utils.EchoVault, return []byte(fmt.Sprintf(":%d\r\n", count)), nil } -func handleZDIFF(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZDIFF(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zdiffKeyFunc(cmd) if err != nil { return nil, err @@ -327,7 +328,7 @@ func handleZDIFF(ctx context.Context, cmd []string, server utils.EchoVault, conn return strings.EqualFold(s, "withscores") }) if withscoresIndex > -1 && withscoresIndex < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } locks := make(map[string]bool) @@ -390,7 +391,7 @@ func handleZDIFF(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(res), nil } -func handleZDIFFSTORE(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZDIFFSTORE(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zdiffstoreKeyFunc(cmd) if err != nil { return nil, err @@ -456,7 +457,7 @@ func handleZDIFFSTORE(ctx context.Context, cmd []string, server utils.EchoVault, return []byte(fmt.Sprintf(":%d\r\n", diff.Cardinality())), nil } -func handleZINCRBY(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZINCRBY(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zincrbyKeyFunc(cmd) if err != nil { return nil, err @@ -523,7 +524,7 @@ func handleZINCRBY(ctx context.Context, cmd []string, server utils.EchoVault, co strconv.FormatFloat(float64(set.Get(member).Score), 'f', -1, 64))), nil } -func handleZINTER(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZINTER(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zinterKeyFunc(cmd) if err != nil { return nil, err @@ -583,7 +584,7 @@ func handleZINTER(ctx context.Context, cmd []string, server utils.EchoVault, con return []byte(res), nil } -func handleZINTERSTORE(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZINTERSTORE(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zinterstoreKeyFunc(cmd) if err != nil { return nil, err @@ -650,7 +651,7 @@ func handleZINTERSTORE(ctx context.Context, cmd []string, server utils.EchoVault return []byte(fmt.Sprintf(":%d\r\n", intersect.Cardinality())), nil } -func handleZMPOP(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZMPOP(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zmpopKeyFunc(cmd) if err != nil { return nil, err @@ -666,7 +667,7 @@ func handleZMPOP(ctx context.Context, cmd []string, server utils.EchoVault, conn }) if countIdx != -1 { if countIdx < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } if countIdx == len(cmd)-1 { return nil, errors.New("count must be a positive integer") @@ -688,7 +689,7 @@ func handleZMPOP(ctx context.Context, cmd []string, server utils.EchoVault, conn }) if policyIdx != -1 { if policyIdx < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } policy = strings.ToLower(cmd[policyIdx]) if modifierIdx == -1 || (policyIdx < modifierIdx) { @@ -728,7 +729,7 @@ func handleZMPOP(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte("*0\r\n"), nil } -func handleZPOP(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZPOP(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zpopKeyFunc(cmd) if err != nil { return nil, err @@ -779,7 +780,7 @@ func handleZPOP(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(res), nil } -func handleZMSCORE(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZMSCORE(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zmscoreKeyFunc(cmd) if err != nil { return nil, err @@ -821,7 +822,7 @@ func handleZMSCORE(ctx context.Context, cmd []string, server utils.EchoVault, co return []byte(res), nil } -func handleZRANDMEMBER(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZRANDMEMBER(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zrandmemberKeyFunc(cmd) if err != nil { return nil, err @@ -876,7 +877,7 @@ func handleZRANDMEMBER(ctx context.Context, cmd []string, server utils.EchoVault return []byte(res), nil } -func handleZRANK(ctx context.Context, cmd []string, server utils.EchoVault, _ *net.Conn) ([]byte, error) { +func handleZRANK(ctx context.Context, cmd []string, server types.EchoVault, _ *net.Conn) ([]byte, error) { keys, err := zrankKeyFunc(cmd) if err != nil { return nil, err @@ -926,7 +927,7 @@ func handleZRANK(ctx context.Context, cmd []string, server utils.EchoVault, _ *n return []byte("$-1\r\n"), nil } -func handleZREM(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZREM(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zremKeyFunc(cmd) if err != nil { return nil, err @@ -958,7 +959,7 @@ func handleZREM(ctx context.Context, cmd []string, server utils.EchoVault, conn return []byte(fmt.Sprintf(":%d\r\n", deletedCount)), nil } -func handleZSCORE(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZSCORE(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zscoreKeyFunc(cmd) if err != nil { return nil, err @@ -987,7 +988,7 @@ func handleZSCORE(ctx context.Context, cmd []string, server utils.EchoVault, con return []byte(fmt.Sprintf("$%d\r\n%s\r\n", len(score), score)), nil } -func handleZREMRANGEBYSCORE(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZREMRANGEBYSCORE(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zremrangebyscoreKeyFunc(cmd) if err != nil { return nil, err @@ -1031,7 +1032,7 @@ func handleZREMRANGEBYSCORE(ctx context.Context, cmd []string, server utils.Echo return []byte(fmt.Sprintf(":%d\r\n", deletedCount)), nil } -func handleZREMRANGEBYRANK(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZREMRANGEBYRANK(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zremrangebyrankKeyFunc(cmd) if err != nil { return nil, err @@ -1096,7 +1097,7 @@ func handleZREMRANGEBYRANK(ctx context.Context, cmd []string, server utils.EchoV return []byte(fmt.Sprintf(":%d\r\n", deletedCount)), nil } -func handleZREMRANGEBYLEX(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZREMRANGEBYLEX(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zremrangebylexKeyFunc(cmd) if err != nil { return nil, err @@ -1143,7 +1144,7 @@ func handleZREMRANGEBYLEX(ctx context.Context, cmd []string, server utils.EchoVa return []byte(fmt.Sprintf(":%d\r\n", deletedCount)), nil } -func handleZRANGE(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZRANGE(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zrangeKeyCount(cmd) if err != nil { return nil, err @@ -1283,7 +1284,7 @@ func handleZRANGE(ctx context.Context, cmd []string, server utils.EchoVault, con return []byte(res), nil } -func handleZRANGESTORE(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZRANGESTORE(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zrangeStoreKeyFunc(cmd) if err != nil { return nil, err @@ -1425,7 +1426,7 @@ func handleZRANGESTORE(ctx context.Context, cmd []string, server utils.EchoVault return []byte(fmt.Sprintf(":%d\r\n", newSortedSet.Cardinality())), nil } -func handleZUNION(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZUNION(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { if _, err := zunionKeyFunc(cmd); err != nil { return nil, err } @@ -1479,7 +1480,7 @@ func handleZUNION(ctx context.Context, cmd []string, server utils.EchoVault, con return []byte(res), nil } -func handleZUNIONSTORE(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleZUNIONSTORE(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := zunionstoreKeyFunc(cmd) if err != nil { return nil, err @@ -1545,12 +1546,12 @@ func handleZUNIONSTORE(ctx context.Context, cmd []string, server utils.EchoVault return []byte(fmt.Sprintf(":%d\r\n", union.Cardinality())), nil } -func Commands() []utils.Command { - return []utils.Command{ +func Commands() []types.Command { + return []types.Command{ { Command: "zadd", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.FastCategory}, Description: `(ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member...]) Adds all the specified members with the specified scores to the sorted set at the key. "NX" only adds the member if it currently does not exist in the sorted set. @@ -1565,8 +1566,8 @@ Adds all the specified members with the specified scores to the sorted set at th }, { Command: "zcard", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(ZCARD key) Returns the set cardinality of the sorted set at key. If the key does not exist, 0 is returned, otherwise the cardinality of the sorted set is returned. If the key holds a value that is not a sorted set, this command will return an error.`, @@ -1576,8 +1577,8 @@ If the key holds a value that is not a sorted set, this command will return an e }, { Command: "zcount", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(ZCOUNT key min max) Returns the number of elements in the sorted set key with scores in the range of min and max. If the key does not exist, a count of 0 is returned, otherwise return the count. @@ -1588,8 +1589,8 @@ If the key holds a value that is not a sorted set, an error is returned.`, }, { Command: "zdiff", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(ZDIFF key [key...] [WITHSCORES]) Computes the difference between all the sorted sets specifies in the list of keys and returns the result.`, Sync: false, @@ -1598,8 +1599,8 @@ Computes the difference between all the sorted sets specifies in the list of key }, { Command: "zdiffstore", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.SlowCategory}, Description: `(ZDIFFSTORE destination key [key...]). Computes the difference between all the sorted sets specifies in the list of keys. Stores the result in destination. If the base set (first key) does not exist, return 0, otherwise, return the cardinality of the diff.`, @@ -1609,8 +1610,8 @@ If the base set (first key) does not exist, return 0, otherwise, return the card }, { Command: "zincrby", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.FastCategory}, Description: `(ZINCRBY key increment member). Increments the score of the specified sorted set's member by the increment. If the member does not exist, it is created. If the key does not exist, it is created with new sorted set and the member added with the increment as its score.`, @@ -1620,8 +1621,8 @@ If the key does not exist, it is created with new sorted set and the member adde }, { Command: "zinter", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(ZINTER key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE ] [WITHSCORES]). Computes the intersection of the sets in the keys, with weights, aggregate and scores`, Sync: false, @@ -1630,8 +1631,8 @@ Computes the intersection of the sets in the keys, with weights, aggregate and s }, { Command: "zinterstore", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.SlowCategory}, Description: ` (ZINTERSTORE destination key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE ] [WITHSCORES]). Computes the intersection of the sets in the keys, with weights, aggregate and scores. The result is stored in destination.`, @@ -1641,8 +1642,8 @@ Computes the intersection of the sets in the keys, with weights, aggregate and s }, { Command: "zmpop", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.SlowCategory}, Description: `(ZMPOP key [key ...] [COUNT count]) Pop a 'count' elements from sorted set. MIN or MAX determines whether to pop elements with the lowest or highest scores respectively.`, @@ -1652,8 +1653,8 @@ respectively.`, }, { Command: "zmscore", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.ReadCategory, constants.FastCategory}, Description: `(ZMSCORE key member [member ...]) Returns the associated scores of the specified member in the sorted set. Returns nil for members that do not exist in the set`, @@ -1663,8 +1664,8 @@ Returns nil for members that do not exist in the set`, }, { Command: "zpopmax", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.SlowCategory}, Description: `(ZPOPMAX key [count]) Removes and returns 'count' number of members in the sorted set with the highest scores. Default count is 1.`, Sync: true, @@ -1673,8 +1674,8 @@ Removes and returns 'count' number of members in the sorted set with the highest }, { Command: "zpopmin", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.SlowCategory}, Description: `(ZPOPMIN key [count]) Removes and returns 'count' number of members in the sorted set with the lowest scores. Default count is 1.`, Sync: true, @@ -1683,8 +1684,8 @@ Removes and returns 'count' number of members in the sorted set with the lowest }, { Command: "zrandmember", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(ZRANDMEMBER key [count [WITHSCORES]]) Return a list of length equivalent to count containing random members of the sorted set. If count is negative, repeated elements are allowed. If count is positive, the returned elements will be distinct. @@ -1695,8 +1696,8 @@ WITHSCORES modifies the result to include scores in the result.`, }, { Command: "zrank", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(ZRANK key member [WITHSCORE]) Returns the rank of the specified member in the sorted set. WITHSCORE modifies the result to also return the score.`, Sync: false, @@ -1705,8 +1706,8 @@ Returns the rank of the specified member in the sorted set. WITHSCORE modifies t }, { Command: "zrevrank", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(ZREVRANK key member [WITHSCORE]) Returns the rank of the member in the sorted set in reverse order. WITHSCORE modifies the result to include the score.`, @@ -1716,8 +1717,8 @@ WITHSCORE modifies the result to include the score.`, }, { Command: "zrem", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.FastCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.FastCategory}, Description: `(ZREM key member [member ...]) Removes the listed members from the sorted set. Returns the number of elements removed.`, Sync: true, @@ -1726,8 +1727,8 @@ Returns the number of elements removed.`, }, { Command: "zscore", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.ReadCategory, constants.FastCategory}, Description: `(ZSCORE key member) Returns the score of the member in the sorted set.`, Sync: false, KeyExtractionFunc: zscoreKeyFunc, @@ -1735,8 +1736,8 @@ Returns the number of elements removed.`, }, { Command: "zremrangebylex", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.SlowCategory}, Description: `(ZREMRANGEBYLEX key min max) Removes the elements in the lexicographical range between min and max`, Sync: true, KeyExtractionFunc: zremrangebylexKeyFunc, @@ -1744,8 +1745,8 @@ Returns the number of elements removed.`, }, { Command: "zremrangebyrank", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.SlowCategory}, Description: `(ZREMRANGEBYRANK key start stop) Removes the elements in the rank range between start and stop. The elements are ordered from lowest score to highest score`, Sync: true, @@ -1754,8 +1755,8 @@ The elements are ordered from lowest score to highest score`, }, { Command: "zremrangebyscore", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.SlowCategory}, Description: `(ZREMRANGEBYSCORE key min max) Removes the elements whose scores are in the range between min and max`, Sync: true, KeyExtractionFunc: zremrangebyscoreKeyFunc, @@ -1763,8 +1764,8 @@ The elements are ordered from lowest score to highest score`, }, { Command: "zlexcount", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(ZLEXCOUNT key min max) Returns the number of elements in within the sorted set within the lexicographical range between min and max. Returns 0, if the keys does not exist or if all the members do not have the same score. If the value held at key is not a sorted set, an error is returned`, @@ -1774,8 +1775,8 @@ the same score. If the value held at key is not a sorted set, an error is return }, { Command: "zrange", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]) Returns the range of elements in the sorted set`, Sync: false, @@ -1784,8 +1785,8 @@ the same score. If the value held at key is not a sorted set, an error is return }, { Command: "zrangestore", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.SlowCategory}, Description: `ZRANGESTORE destination source start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES] Retrieve the range of elements in the sorted set and store it in destination`, Sync: true, @@ -1794,8 +1795,8 @@ the same score. If the value held at key is not a sorted set, an error is return }, { Command: "zunion", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.ReadCategory, constants.SlowCategory}, Description: `(ZUNION key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE ] [WITHSCORES]) Return the union of the sorted sets in keys. The scores of each member of a sorted set are multiplied by the corresponding weight in WEIGHTS. Aggregate determines how the scores are combined. @@ -1806,8 +1807,8 @@ WITHSCORES option determines whether to return the result with scores included.` }, { Command: "zunionstore", - Module: utils.SortedSetModule, - Categories: []string{utils.SortedSetCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.SortedSetModule, + Categories: []string{constants.SortedSetCategory, constants.WriteCategory, constants.SlowCategory}, Description: `(ZUNIONSTORE destination key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE ] [WITHSCORES]) Return the union of the sorted sets in keys. The scores of each member of a sorted set are multiplied by the corresponding weight in WEIGHTS. Aggregate determines how the scores are combined. diff --git a/pkg/modules/sorted_set/commands_test.go b/pkg/modules/sorted_set/commands_test.go index dc33720..e090332 100644 --- a/pkg/modules/sorted_set/commands_test.go +++ b/pkg/modules/sorted_set/commands_test.go @@ -21,8 +21,8 @@ import ( "fmt" "github.com/echovault/echovault/internal/config" "github.com/echovault/echovault/internal/sorted_set" + "github.com/echovault/echovault/pkg/constants" "github.com/echovault/echovault/pkg/echovault" - "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" "math" "slices" @@ -36,7 +36,7 @@ func init() { mockServer = echovault.NewEchoVault( echovault.WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) } @@ -226,7 +226,7 @@ func Test_HandleZADD(t *testing.T) { command: []string{"ZADD", "ZaddKey11"}, expectedValue: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 12. Throw error when score/member entries are do not match preset: false, @@ -335,7 +335,7 @@ func Test_HandleZCARD(t *testing.T) { command: []string{"ZCARD"}, expectedValue: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 4. Command too long preset: false, @@ -344,7 +344,7 @@ func Test_HandleZCARD(t *testing.T) { command: []string{"ZCARD", "ZcardKey4", "ZcardKey5"}, expectedValue: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 5. Return error when not a sorted set preset: true, @@ -476,7 +476,7 @@ func Test_HandleZCOUNT(t *testing.T) { command: []string{"ZCOUNT"}, expectedValue: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 7. Command too long preset: false, @@ -485,7 +485,7 @@ func Test_HandleZCOUNT(t *testing.T) { command: []string{"ZCOUNT", "ZcountKey4", "min", "max", "count"}, expectedValue: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 8. Throw error when value at the key is not a sorted set preset: true, @@ -600,7 +600,7 @@ func Test_HandleZLEXCOUNT(t *testing.T) { command: []string{"ZLEXCOUNT"}, expectedValue: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 6. Command too long preset: false, @@ -609,7 +609,7 @@ func Test_HandleZLEXCOUNT(t *testing.T) { command: []string{"ZLEXCOUNT", "ZlexCountKey6", "min", "max", "count"}, expectedValue: nil, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -762,7 +762,7 @@ func Test_HandleZDIFF(t *testing.T) { preset: false, command: []string{"ZDIFF"}, expectedResponse: [][]string{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -939,7 +939,7 @@ func Test_HandleZDIFFSTORE(t *testing.T) { preset: false, command: []string{"ZDIFFSTORE", "ZdiffStoreDestinationKey6"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1151,13 +1151,13 @@ func Test_HandleZINCRBY(t *testing.T) { key: "ZincrbyKey11", command: []string{"ZINCRBY", "ZincrbyKey11", "one"}, expectedResponse: "", - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 12. Command too long key: "ZincrbyKey12", command: []string{"ZINCRBY", "ZincrbyKey12", "one", "1", "2"}, expectedResponse: "", - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1380,7 +1380,7 @@ func Test_HandleZMPOP(t *testing.T) { { // 9. Command too short preset: false, command: []string{"ZMPOP"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1548,12 +1548,12 @@ func Test_HandleZPOP(t *testing.T) { { // 6. Command too short preset: false, command: []string{"ZPOPMAX"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 7. Command too long preset: false, command: []string{"ZPOPMAX", "ZmpopMaxKey7", "6", "3"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1655,7 +1655,7 @@ func Test_HandleZMSCORE(t *testing.T) { { // 9. Command too short preset: false, command: []string{"ZMSCORE"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1752,12 +1752,12 @@ func Test_HandleZSCORE(t *testing.T) { { // 5. Command too short preset: false, command: []string{"ZSCORE"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 6. Command too long preset: false, command: []string{"ZSCORE", "ZscoreKey5", "one", "two"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -1859,12 +1859,12 @@ func Test_HandleZRANDMEMBER(t *testing.T) { { // 5. Command too short preset: false, command: []string{"ZRANDMEMBER"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 6. Command too long preset: false, command: []string{"ZRANDMEMBER", "source5", "source6", "member1", "member2"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 7. Throw error when count is not an integer preset: false, @@ -2026,12 +2026,12 @@ func Test_HandleZRANK(t *testing.T) { { // 5. Command too short preset: false, command: []string{"ZRANK"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 6. Command too long preset: false, command: []string{"ZRANK", "ZrankKey5", "one", "WITHSCORES", "two"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -2131,7 +2131,7 @@ func Test_HandleZREM(t *testing.T) { { // 9. Command too short preset: false, command: []string{"ZREM"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -2234,12 +2234,12 @@ func Test_HandleZREMRANGEBYSCORE(t *testing.T) { { // 4. Command too short preset: false, command: []string{"ZREMRANGEBYSCORE", "ZremRangeByScoreKey4", "3"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 5. Command too long preset: false, command: []string{"ZREMRANGEBYSCORE", "ZremRangeByScoreKey5", "4", "5", "8"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -2364,7 +2364,7 @@ func Test_HandleZREMRANGEBYRANK(t *testing.T) { { // 4. Command too short preset: false, command: []string{"ZREMRANGEBYRANK", "ZremRangeByRankKey4", "3"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 5. Return error when start index is out of bounds preset: true, @@ -2401,7 +2401,7 @@ func Test_HandleZREMRANGEBYRANK(t *testing.T) { { // 7. Command too long preset: false, command: []string{"ZREMRANGEBYRANK", "ZremRangeByRankKey7", "4", "5", "8"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -2529,12 +2529,12 @@ func Test_HandleZREMRANGEBYLEX(t *testing.T) { { // 4. Command too short preset: false, command: []string{"ZREMRANGEBYLEX", "ZremRangeByLexKey4", "a"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 5. Command too long preset: false, command: []string{"ZREMRANGEBYLEX", "ZremRangeByLexKey5", "a", "b", "c"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -2774,14 +2774,14 @@ func Test_HandleZRANGE(t *testing.T) { presetValues: nil, command: []string{"ZRANGE", "ZrangeKey15", "1"}, expectedResponse: [][]string{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 16 Command too long preset: false, presetValues: nil, command: []string{"ZRANGE", "ZrangeKey16", "a", "h", "BYLEX", "WITHSCORES", "LIMIT", "-4", "9", "REV", "WITHSCORES"}, expectedResponse: [][]string{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -3058,14 +3058,14 @@ func Test_HandleZRANGESTORE(t *testing.T) { presetValues: nil, command: []string{"ZRANGESTORE", "ZrangeStoreKey15", "1"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 16 Command too long preset: false, presetValues: nil, command: []string{"ZRANGESTORE", "ZrangeStoreDestinationKey16", "ZrangeStoreKey16", "a", "h", "BYLEX", "WITHSCORES", "LIMIT", "-4", "9", "REV", "WITHSCORES"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -3341,7 +3341,7 @@ func Test_HandleZINTER(t *testing.T) { }, command: []string{"ZINTER", "WEIGHTS", "5", "4"}, expectedResponse: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 11. Throw an error if any of the provided keys are not sorted sets preset: true, @@ -3381,7 +3381,7 @@ func Test_HandleZINTER(t *testing.T) { preset: false, command: []string{"ZINTER"}, expectedResponse: [][]string{}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -3688,7 +3688,7 @@ func Test_HandleZINTERSTORE(t *testing.T) { }, command: []string{"ZINTERSTORE", "WEIGHTS", "5", "4"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 11. Throw an error if any of the provided keys are not sorted sets preset: true, @@ -3728,7 +3728,7 @@ func Test_HandleZINTERSTORE(t *testing.T) { preset: false, command: []string{"ZINTERSTORE"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -4029,7 +4029,7 @@ func Test_HandleZUNION(t *testing.T) { }, command: []string{"ZUNION", "WEIGHTS", "5", "4"}, expectedResponse: nil, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 11. Throw an error if any of the provided keys are not sorted sets preset: true, @@ -4071,7 +4071,7 @@ func Test_HandleZUNION(t *testing.T) { { // 13. Command too short preset: false, command: []string{"ZUNION"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -4410,7 +4410,7 @@ func Test_HandleZUNIONSTORE(t *testing.T) { }, command: []string{"ZUNIONSTORE", "WEIGHTS", "5", "4"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // 11. Throw an error if any of the provided keys are not sorted sets preset: true, @@ -4457,7 +4457,7 @@ func Test_HandleZUNIONSTORE(t *testing.T) { preset: false, command: []string{"ZUNIONSTORE"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } diff --git a/pkg/modules/sorted_set/key_funcs.go b/pkg/modules/sorted_set/key_funcs.go index 95028e9..cbee3f7 100644 --- a/pkg/modules/sorted_set/key_funcs.go +++ b/pkg/modules/sorted_set/key_funcs.go @@ -16,35 +16,35 @@ package sorted_set import ( "errors" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" "slices" "strings" ) func zaddKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zcardKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:], nil } func zcountKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zdiffKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } withscoresIndex := slices.IndexFunc(cmd, func(s string) bool { @@ -60,21 +60,21 @@ func zdiffKeyFunc(cmd []string) ([]string, error) { func zdiffstoreKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[2:], nil } func zincrbyKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zinterKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } endIdx := slices.IndexFunc(cmd[1:], func(s string) bool { if strings.EqualFold(s, "WEIGHTS") || @@ -90,12 +90,12 @@ func zinterKeyFunc(cmd []string) ([]string, error) { if endIdx >= 1 { return cmd[1:endIdx], nil } - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } func zinterstoreKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } endIdx := slices.IndexFunc(cmd[1:], func(s string) bool { if strings.EqualFold(s, "WEIGHTS") || @@ -111,12 +111,12 @@ func zinterstoreKeyFunc(cmd []string) ([]string, error) { if endIdx >= 2 { return cmd[1:endIdx], nil } - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } func zmpopKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } endIdx := slices.IndexFunc(cmd, func(s string) bool { return slices.Contains([]string{"MIN", "MAX", "COUNT"}, strings.ToUpper(s)) @@ -127,103 +127,103 @@ func zmpopKeyFunc(cmd []string) ([]string, error) { if endIdx >= 2 { return cmd[1:endIdx], nil } - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } func zmscoreKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zpopKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 || len(cmd) > 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zrandmemberKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 || len(cmd) > 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zrankKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 || len(cmd) > 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zremKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zrevrankKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zscoreKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 3 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zremrangebylexKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zremrangebyrankKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zremrangebyscoreKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zlexcountKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zrangeKeyCount(cmd []string) ([]string, error) { if len(cmd) < 4 || len(cmd) > 10 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:2], nil } func zrangeStoreKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 5 || len(cmd) > 11 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return cmd[1:3], nil } func zunionKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } endIdx := slices.IndexFunc(cmd[1:], func(s string) bool { if strings.EqualFold(s, "WEIGHTS") || @@ -239,12 +239,12 @@ func zunionKeyFunc(cmd []string) ([]string, error) { if endIdx >= 1 { return cmd[1:endIdx], nil } - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } func zunionstoreKeyFunc(cmd []string) ([]string, error) { if len(cmd) < 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } endIdx := slices.IndexFunc(cmd[1:], func(s string) bool { if strings.EqualFold(s, "WEIGHTS") || @@ -260,5 +260,5 @@ func zunionstoreKeyFunc(cmd []string) ([]string, error) { if endIdx >= 1 { return cmd[1:endIdx], nil } - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } diff --git a/pkg/modules/string/commands.go b/pkg/modules/string/commands.go index 329e508..458f49f 100644 --- a/pkg/modules/string/commands.go +++ b/pkg/modules/string/commands.go @@ -19,11 +19,12 @@ import ( "errors" "fmt" "github.com/echovault/echovault/internal" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" + "github.com/echovault/echovault/pkg/types" "net" ) -func handleSetRange(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSetRange(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := setRangeKeyFunc(cmd) if err != nil { return nil, err @@ -98,7 +99,7 @@ func handleSetRange(ctx context.Context, cmd []string, server utils.EchoVault, c return []byte(fmt.Sprintf(":%d\r\n", len(strRunes))), nil } -func handleStrLen(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleStrLen(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := strLenKeyFunc(cmd) if err != nil { return nil, err @@ -124,7 +125,7 @@ func handleStrLen(ctx context.Context, cmd []string, server utils.EchoVault, con return []byte(fmt.Sprintf(":%d\r\n", len(value))), nil } -func handleSubStr(ctx context.Context, cmd []string, server utils.EchoVault, conn *net.Conn) ([]byte, error) { +func handleSubStr(ctx context.Context, cmd []string, server types.EchoVault, conn *net.Conn) ([]byte, error) { keys, err := subStrKeyFunc(cmd) if err != nil { return nil, err @@ -187,12 +188,12 @@ func handleSubStr(ctx context.Context, cmd []string, server utils.EchoVault, con return []byte(fmt.Sprintf("$%d\r\n%s\r\n", len(str), str)), nil } -func Commands() []utils.Command { - return []utils.Command{ +func Commands() []types.Command { + return []types.Command{ { Command: "setrange", - Module: utils.StringModule, - Categories: []string{utils.StringCategory, utils.WriteCategory, utils.SlowCategory}, + Module: constants.StringModule, + Categories: []string{constants.StringCategory, constants.WriteCategory, constants.SlowCategory}, Description: "(SETRANGE key offset value) Overwrites part of a string value with another by offset. Creates the key if it doesn't exist.", Sync: true, KeyExtractionFunc: setRangeKeyFunc, @@ -200,8 +201,8 @@ func Commands() []utils.Command { }, { Command: "strlen", - Module: utils.StringModule, - Categories: []string{utils.StringCategory, utils.ReadCategory, utils.FastCategory}, + Module: constants.StringModule, + Categories: []string{constants.StringCategory, constants.ReadCategory, constants.FastCategory}, Description: "(STRLEN key) Returns length of the key's value if it's a string.", Sync: false, KeyExtractionFunc: strLenKeyFunc, @@ -209,8 +210,8 @@ func Commands() []utils.Command { }, { Command: "substr", - Module: utils.StringModule, - Categories: []string{utils.StringCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.StringModule, + Categories: []string{constants.StringCategory, constants.ReadCategory, constants.SlowCategory}, Description: "(SUBSTR key start end) Returns a substring from the string value.", Sync: false, KeyExtractionFunc: subStrKeyFunc, @@ -218,8 +219,8 @@ func Commands() []utils.Command { }, { Command: "getrange", - Module: utils.StringModule, - Categories: []string{utils.StringCategory, utils.ReadCategory, utils.SlowCategory}, + Module: constants.StringModule, + Categories: []string{constants.StringCategory, constants.ReadCategory, constants.SlowCategory}, Description: "(GETRANGE key start end) Returns a substring from the string value.", Sync: false, KeyExtractionFunc: subStrKeyFunc, diff --git a/pkg/modules/string/commands_test.go b/pkg/modules/string/commands_test.go index 21d93f6..a726926 100644 --- a/pkg/modules/string/commands_test.go +++ b/pkg/modules/string/commands_test.go @@ -21,8 +21,8 @@ import ( "fmt" "github.com/echovault/echovault/internal" "github.com/echovault/echovault/internal/config" + "github.com/echovault/echovault/pkg/constants" "github.com/echovault/echovault/pkg/echovault" - "github.com/echovault/echovault/pkg/utils" "github.com/tidwall/resp" "strconv" "testing" @@ -34,7 +34,7 @@ func init() { mockServer = echovault.NewEchoVault( echovault.WithConfig(config.Config{ DataDir: "", - EvictionPolicy: utils.NoEviction, + EvictionPolicy: constants.NoEviction, }), ) } @@ -121,13 +121,13 @@ func Test_HandleSetRange(t *testing.T) { preset: false, command: []string{"SETRANGE", "key"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long preset: false, command: []string{"SETRANGE", "key", "offset", "value", "value1"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -210,7 +210,7 @@ func Test_HandleStrLen(t *testing.T) { presetValue: "", command: []string{"STRLEN"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Too many args preset: false, @@ -218,7 +218,7 @@ func Test_HandleStrLen(t *testing.T) { presetValue: "", command: []string{"STRLEN", "StrLenKey4", "StrLenKey5"}, expectedResponse: 0, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, } @@ -316,12 +316,12 @@ func Test_HandleSubStr(t *testing.T) { }, { // Command too short command: []string{"SUBSTR", "key", "10"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Command too long command: []string{"SUBSTR", "key", "10", "15", "20"}, - expectedError: errors.New(utils.WrongArgsResponse), + expectedError: errors.New(constants.WrongArgsResponse), }, { // Start index is not an integer command: []string{"SUBSTR", "key", "start", "10"}, diff --git a/pkg/modules/string/key_funcs.go b/pkg/modules/string/key_funcs.go index 395df57..97cb380 100644 --- a/pkg/modules/string/key_funcs.go +++ b/pkg/modules/string/key_funcs.go @@ -16,26 +16,26 @@ package str import ( "errors" - "github.com/echovault/echovault/pkg/utils" + "github.com/echovault/echovault/pkg/constants" ) func setRangeKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func strLenKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 2 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } func subStrKeyFunc(cmd []string) ([]string, error) { if len(cmd) != 4 { - return nil, errors.New(utils.WrongArgsResponse) + return nil, errors.New(constants.WrongArgsResponse) } return []string{cmd[1]}, nil } diff --git a/pkg/utils/types.go b/pkg/types/types.go similarity index 99% rename from pkg/utils/types.go rename to pkg/types/types.go index d64cbd0..b1c98df 100644 --- a/pkg/utils/types.go +++ b/pkg/types/types.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package utils +package types import ( "context"