[{"data":1,"prerenderedAt":717},["ShallowReactive",2],{"navigation":3,"/concepts/configuration-types":190,"/concepts/configuration-types-surround":712},[4,34,66,87,106,127,137,166],{"title":5,"path":6,"stem":7,"children":8,"icon":32,"defaultOpen":33},"Getting Started","/getting-started","1.getting-started/1.index",[9,12,17,22,27],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-info",{"title":13,"path":14,"stem":15,"icon":16},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Quickstart (Local)","/getting-started/quickstart-local","1.getting-started/3.quickstart-local","i-lucide-zap",{"title":23,"path":24,"stem":25,"icon":26},"Quickstart (Redis)","/getting-started/quickstart-redis","1.getting-started/4.quickstart-redis","i-lucide-database",{"title":28,"path":29,"stem":30,"icon":31},"Quickstart (Hybrid)","/getting-started/quickstart-hybrid","1.getting-started/5.quickstart-hybrid","i-lucide-arrow-left-right","i-lucide-rocket",true,{"title":35,"icon":36,"defaultOpen":33,"path":37,"stem":38,"children":39,"page":65},"Concepts","i-lucide-lightbulb","/concepts","2.concepts",[40,45,50,55,60],{"title":41,"path":42,"stem":43,"icon":44},"Keys","/concepts/keys","2.concepts/1.keys","i-lucide-key-round",{"title":46,"path":47,"stem":48,"icon":49},"Rate Limits","/concepts/rate-limits","2.concepts/2.rate-limits","i-lucide-badge-percent",{"title":51,"path":52,"stem":53,"icon":54},"Sliding Windows","/concepts/sliding-windows","2.concepts/3.sliding-windows","i-lucide-timer-reset",{"title":56,"path":57,"stem":58,"icon":59},"Decisions","/concepts/decisions","2.concepts/4.decisions","i-lucide-check-check",{"title":61,"path":62,"stem":63,"icon":64},"Configuration Types","/concepts/configuration-types","2.concepts/5.configuration-types","i-lucide-box",false,{"title":67,"icon":68,"defaultOpen":33,"path":69,"stem":70,"children":71,"page":65},"Strategies","i-lucide-git-branch","/strategies","3.strategies",[72,77,82],{"title":73,"path":74,"stem":75,"icon":76},"Absolute","/strategies/absolute","3.strategies/1.absolute","i-lucide-shield",{"title":78,"path":79,"stem":80,"icon":81},"Suppressed","/strategies/suppressed","3.strategies/2.suppressed","i-lucide-activity",{"title":83,"path":84,"stem":85,"icon":86},"How Suppression Works","/strategies/how-suppression-works","3.strategies/3.how-suppression-works","i-lucide-function-square",{"title":88,"icon":89,"defaultOpen":33,"path":90,"stem":91,"children":92,"page":65},"Providers","i-lucide-layers","/providers","4.providers",[93,98,102],{"title":94,"path":95,"stem":96,"icon":97},"Local","/providers/local","4.providers/1.local","i-lucide-cpu",{"title":99,"path":100,"stem":101,"icon":26},"Redis","/providers/redis","4.providers/2.redis",{"title":103,"path":104,"stem":105,"icon":31},"Hybrid","/providers/hybrid","4.providers/3.hybrid",{"title":107,"icon":108,"defaultOpen":65,"path":109,"stem":110,"children":111,"page":65},"Guides","i-lucide-map","/guides","5.guides",[112,117,122],{"title":113,"path":114,"stem":115,"icon":116},"Configuration","/guides/configuration","5.guides/1.configuration","i-lucide-sliders-horizontal",{"title":118,"path":119,"stem":120,"icon":121},"Cleanup","/guides/cleanup","5.guides/2.cleanup","i-lucide-trash-2",{"title":123,"path":124,"stem":125,"icon":126},"Troubleshooting","/guides/troubleshooting","5.guides/4.troubleshooting","i-lucide-wrench",{"title":128,"icon":129,"defaultOpen":65,"path":130,"stem":131,"children":132,"page":65},"Reference","i-lucide-file-text","/reference","6.reference",[133],{"title":134,"path":135,"stem":136,"icon":129},"API Reference Guide","/reference/api","6.reference/1.api",{"title":138,"icon":139,"defaultOpen":65,"path":140,"stem":141,"children":142,"page":65},"Benchmarks","i-lucide-gauge","/benchmarks","7.benchmarks",[143,148,152],{"title":144,"path":145,"stem":146,"icon":147},"Benchmark Concepts","/benchmarks/benchmark-concepts","7.benchmarks/0.benchmark-concepts","i-lucide-book-open",{"title":149,"path":150,"stem":151,"icon":139},"Benchmarking & Load Testing","/benchmarks/benchmarking-load-testing","7.benchmarks/1.benchmarking-load-testing",{"title":153,"path":154,"stem":155,"children":156,"icon":165},"Benchmark Results","/benchmarks/benchmark-results","7.benchmarks/2.benchmark-results",[157,161],{"title":158,"path":159,"stem":160,"icon":97},"Local Benchmark Comparison","/benchmarks/benchmark-results/local-benchmark-comparison","7.benchmarks/2.benchmark-results/1.local-benchmark-comparison",{"title":162,"path":163,"stem":164,"icon":26},"Redis + Hybrid Benchmark Comparison","/benchmarks/benchmark-results/redis-benchmark-comparison","7.benchmarks/2.benchmark-results/2.redis-benchmark-comparison","i-lucide-chart-no-axes-combined",{"title":167,"path":168,"stem":169,"children":170,"icon":172,"defaultOpen":65},"Changelog","/changelog","8.changelog/0.index",[171,173,178,182,186],{"title":167,"path":168,"stem":169,"icon":172},"i-lucide-scroll",{"title":174,"path":175,"stem":176,"icon":177},"v2.0.0","/changelog/v2-0-0","8.changelog/1.v2-0-0","i-lucide-tag",{"title":179,"path":180,"stem":181,"icon":177},"v1.1.0","/changelog/v1-1-0","8.changelog/2.v1-1-0",{"title":183,"path":184,"stem":185,"icon":177},"v1.0.1","/changelog/v1-0-1","8.changelog/3.v1-0-1",{"title":187,"path":188,"stem":189,"icon":177},"v1.0.0","/changelog/v1-0-0","8.changelog/4.v1-0-0",{"id":191,"title":61,"authors":192,"badge":192,"body":193,"date":192,"description":706,"extension":707,"links":192,"meta":708,"navigation":709,"path":62,"seo":710,"stem":63,"__hash__":711},"docs/2.concepts/5.configuration-types.md",null,{"type":194,"value":195,"toc":699},"minimark",[196,205,209,214,343,363,367,583,587,597,605,620,627,634,686,695],[197,198,199,200,204],"p",{},"Trypema uses small validated types instead of unitless numbers. Each constructor names its unit,\nrejects zero or invalid values, and has an ",[201,202,203],"code",{},"_or_panic"," form for known constants.",[206,207],"topic-figure",{"topic":208},"sliding",[210,211,213],"h2",{"id":212},"core-types","Core types",[215,216,217,236],"table",{},[218,219,220],"thead",{},[221,222,223,227,230,233],"tr",{},[224,225,226],"th",{},"Type",[224,228,229],{},"Meaning",[224,231,232],{},"Accepted constructor units",[224,234,235],{},"Default",[237,238,239,260,276,292,312,327],"tbody",{},[221,240,241,247,250,253],{},[242,243,244],"td",{},[201,245,246],{},"RateLimit",[242,248,249],{},"target usage rate",[242,251,252],{},"per second, minute, hour, day, week, or 30-day month",[242,254,255,256,259],{},"none; supplied to ",[201,257,258],{},"inc"," and conditional updates",[221,261,262,267,270,273],{},[242,263,264],{},[201,265,266],{},"WindowSize",[242,268,269],{},"how far back live usage is counted",[242,271,272],{},"seconds through 30-day months",[242,274,275],{},"10 seconds",[221,277,278,283,286,289],{},[242,279,280],{},[201,281,282],{},"BucketSize",[242,284,285],{},"interval used to merge nearby increments into one history bucket",[242,287,288],{},"milliseconds through 30-day months",[242,290,291],{},"100 milliseconds",[221,293,294,299,302,308],{},[242,295,296],{},[201,297,298],{},"HardLimitFactor",[242,300,301],{},"suppressed hard-capacity multiplier",[242,303,304,305],{},"unitless value at least ",[201,306,307],{},"1.0",[242,309,310],{},[201,311,307],{},[221,313,314,319,322,325],{},[242,315,316],{},[201,317,318],{},"SuppressionFactorCachePeriod",[242,320,321],{},"how long a computed suppression factor may be reused",[242,323,324],{},"milliseconds through days",[242,326,291],{},[221,328,329,334,337,340],{},[242,330,331],{},[201,332,333],{},"SyncInterval",[242,335,336],{},"hybrid local-to-Redis flush cadence",[242,338,339],{},"milliseconds through hours",[242,341,342],{},"10 milliseconds",[197,344,345,347,348,347,350,352,353,355,356,359,360,362],{},[201,346,266],{},", ",[201,349,282],{},[201,351,298],{},", and ",[201,354,318],{}," configure every\nprovider through ",[201,357,358],{},"RateLimiterBuilder",". ",[201,361,333],{}," exists only on hybrid builder.",[210,364,366],{"id":365},"example","Example",[368,369,374],"pre",{"className":370,"code":371,"language":372,"meta":373,"style":373},"language-rust shiki shiki-themes material-theme-lighter github-light github-dark monokai","use trypema::{\n    BucketSize, HardLimitFactor, RateLimit, SuppressionFactorCachePeriod, WindowSize,\n};\n\nlet rate = RateLimit::per_minute_or_panic(300.0); // equivalent to 5 requests/second\nlet window = WindowSize::minutes_or_panic(1);\nlet bucket = BucketSize::milliseconds_or_panic(10);\nlet hard_factor = HardLimitFactor::new_or_panic(1.5);\nlet cache = SuppressionFactorCachePeriod::milliseconds_or_panic(100);\n","rust","",[201,375,376,397,427,433,439,482,507,532,560],{"__ignoreMap":373},[377,378,381,385,389,393],"span",{"class":379,"line":380},"line",1,[377,382,384],{"class":383},"shWJe","use",[377,386,388],{"class":387},"sKvfc"," trypema",[377,390,392],{"class":391},"sGXK2","::",[377,394,396],{"class":395},"swvn1","{\n",[377,398,400,403,406,409,411,414,416,419,421,424],{"class":379,"line":399},2,[377,401,402],{"class":387},"    BucketSize",[377,404,405],{"class":395},",",[377,407,408],{"class":387}," HardLimitFactor",[377,410,405],{"class":395},[377,412,413],{"class":387}," RateLimit",[377,415,405],{"class":395},[377,417,418],{"class":387}," SuppressionFactorCachePeriod",[377,420,405],{"class":395},[377,422,423],{"class":387}," WindowSize",[377,425,426],{"class":395},",\n",[377,428,430],{"class":379,"line":429},3,[377,431,432],{"class":395},"};\n",[377,434,436],{"class":379,"line":435},4,[377,437,438],{"emptyLinePlaceholder":33},"\n",[377,440,442,446,450,453,455,457,461,464,468,472,475,478],{"class":379,"line":441},5,[377,443,445],{"class":444},"srJo8","let",[377,447,449],{"class":448},"ss--_"," rate ",[377,451,452],{"class":391},"=",[377,454,413],{"class":387},[377,456,392],{"class":391},[377,458,460],{"class":459},"sD0ED","per_minute_or_panic",[377,462,463],{"class":395},"(",[377,465,467],{"class":466},"sYThS","300",[377,469,471],{"class":470},"sMTiH",".",[377,473,474],{"class":466},"0",[377,476,477],{"class":395},");",[377,479,481],{"class":480},"ss7Ak"," // equivalent to 5 requests/second\n",[377,483,485,487,490,492,494,496,499,501,504],{"class":379,"line":484},6,[377,486,445],{"class":444},[377,488,489],{"class":448}," window ",[377,491,452],{"class":391},[377,493,423],{"class":387},[377,495,392],{"class":391},[377,497,498],{"class":459},"minutes_or_panic",[377,500,463],{"class":395},[377,502,503],{"class":466},"1",[377,505,506],{"class":395},");\n",[377,508,510,512,515,517,520,522,525,527,530],{"class":379,"line":509},7,[377,511,445],{"class":444},[377,513,514],{"class":448}," bucket ",[377,516,452],{"class":391},[377,518,519],{"class":387}," BucketSize",[377,521,392],{"class":391},[377,523,524],{"class":459},"milliseconds_or_panic",[377,526,463],{"class":395},[377,528,529],{"class":466},"10",[377,531,506],{"class":395},[377,533,535,537,540,542,544,546,549,551,553,555,558],{"class":379,"line":534},8,[377,536,445],{"class":444},[377,538,539],{"class":448}," hard_factor ",[377,541,452],{"class":391},[377,543,408],{"class":387},[377,545,392],{"class":391},[377,547,548],{"class":459},"new_or_panic",[377,550,463],{"class":395},[377,552,503],{"class":466},[377,554,471],{"class":470},[377,556,557],{"class":466},"5",[377,559,506],{"class":395},[377,561,563,565,568,570,572,574,576,578,581],{"class":379,"line":562},9,[377,564,445],{"class":444},[377,566,567],{"class":448}," cache ",[377,569,452],{"class":391},[377,571,418],{"class":387},[377,573,392],{"class":391},[377,575,524],{"class":459},[377,577,463],{"class":395},[377,579,580],{"class":466},"100",[377,582,506],{"class":395},[210,584,586],{"id":585},"capacity-and-validation","Capacity and validation",[197,588,589,590,593,594,596],{},"Absolute capacity is ",[201,591,592],{},"rate per second × window seconds",", converted to an integer using\ntruncation. Suppressed hard capacity multiplies that value by ",[201,595,298],{},"; its soft target\nis base capacity.",[197,598,599,601,602,604],{},[201,600,282],{}," must be less than or equal to ",[201,603,266],{},". Builder validates this relationship even\nwhen setters are called in another order. One month always means 30 days.",[197,606,607,608,611,612,615,616,619],{},"Fallible constructors such as ",[201,609,610],{},"WindowSize::minutes(1)"," return ",[201,613,614],{},"Result",". Use\n",[201,617,618],{},"WindowSize::minutes_or_panic(1)"," only when value is a trusted constant.",[210,621,623,624],{"id":622},"standard-library-duration","Standard-library ",[201,625,626],{},"Duration",[197,628,629,630,633],{},"Cleanup timing and rejection waiting time use ",[201,631,632],{},"std::time::Duration",", not a Trypema wrapper:",[368,635,637],{"className":370,"code":636,"language":372,"meta":373,"style":373},"use std::time::Duration;\n\nlet cleanup_interval = Duration::from_secs(30);\n",[201,638,639,658,662],{"__ignoreMap":373},[377,640,641,643,646,648,651,653,655],{"class":379,"line":380},[377,642,384],{"class":383},[377,644,645],{"class":387}," std",[377,647,392],{"class":391},[377,649,650],{"class":387},"time",[377,652,392],{"class":391},[377,654,626],{"class":387},[377,656,657],{"class":395},";\n",[377,659,660],{"class":379,"line":399},[377,661,438],{"emptyLinePlaceholder":33},[377,663,664,666,669,671,674,676,679,681,684],{"class":379,"line":429},[377,665,445],{"class":444},[377,667,668],{"class":448}," cleanup_interval ",[377,670,452],{"class":391},[377,672,673],{"class":387}," Duration",[377,675,392],{"class":391},[377,677,678],{"class":459},"from_secs",[377,680,463],{"class":395},[377,682,683],{"class":466},"30",[377,685,506],{"class":395},[197,687,688,691,692,694],{},[201,689,690],{},"RateLimitDecision::Rejected::retry_after"," is a ",[201,693,626],{}," until oldest live bucket expires.",[696,697,698],"style",{},"html pre.shiki code .shWJe, html code.shiki .shWJe{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sKvfc, html code.shiki .sKvfc{--shiki-light:#E2931D;--shiki-light-text-decoration:inherit;--shiki-default:#6F42C1;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-text-decoration:underline}html pre.shiki code .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .swvn1, html code.shiki .swvn1{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .srJo8, html code.shiki .srJo8{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sD0ED, html code.shiki .sD0ED{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sYThS, html code.shiki .sYThS{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sMTiH, html code.shiki .sMTiH{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .ss7Ak, html code.shiki .ss7Ak{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit;--shiki-sepia:#88846F;--shiki-sepia-font-style:inherit}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":373,"searchDepth":380,"depth":399,"links":700},[701,702,703,704],{"id":212,"depth":399,"text":213},{"id":365,"depth":399,"text":366},{"id":585,"depth":399,"text":586},{"id":622,"depth":399,"text":705},"Standard-library Duration","What each validated v2 configuration type means, which units it accepts, and where it applies.","md",{},{"icon":64},{"title":61,"description":706},"PrU6UlLxtL-HUC-47B5iH-Idv3MfL-fybhIsgFLlMRM",[713,715],{"title":56,"path":57,"stem":58,"description":714,"icon":59,"children":-1},"Trypema returns decisions that tell you whether to proceed, reject, or shed load.",{"title":73,"path":74,"stem":75,"description":716,"icon":76,"children":-1},"Sliding-window allow or reject admission with best-effort concurrency semantics.",1784684765762]