@@ -394,37 +394,59 @@ <h1>Gengoscript</h1>
394394 < p > Gengoscript gives hosts constrained domain values, explicit imports, and user-defined logic that can reach only the capabilities the host exposes.</ p >
395395 < pre > < code > < span class ="k "> type</ span > Port < span class ="t "> int</ span > < span class ="k "> range</ span > 1..65535
396396< span class ="k "> type</ span > Hour < span class ="t "> int</ span > < span class ="k "> cycle</ span > 0..23
397+ < span class ="k "> type</ span > RetryCount < span class ="t "> int</ span > < span class ="k "> predicate</ span > < span class ="k "> func</ span > (n) {
398+ < span class ="k "> return</ span > n > = 0 < span class ="k "> and</ span > n < = 5
399+ }
397400
398- < span class ="k "> pub func</ span > allow(port < span class ="t "> int</ span > , hour < span class ="t "> int</ span > ) < span class ="t "> bool</ span > {
399- p := Port(port)
400- h := Hour(hour)
401- < span class ="k "> return</ span > p == Port(443) < span class ="k "> and</ span > h > = Hour(8) < span class ="k "> and</ span > h < = Hour(18)
401+ < span class ="k "> pub func</ span > allow(
402+ raw_port < span class ="t "> int</ span > ,
403+ raw_hour < span class ="t "> int</ span > ,
404+ raw_retries < span class ="t "> int</ span > ,
405+ ) < span class ="t "> bool</ span > {
406+ port := Port(raw_port)
407+ hour := Hour(raw_hour)
408+ retries := RetryCount(raw_retries)
409+ < span class ="k "> return</ span > port == Port(443)
410+ < span class ="k "> and</ span > hour > = Hour(8)
411+ < span class ="k "> and</ span > retries < = RetryCount(2)
402412}
403413 </ code > </ pre >
404414 < div class ="examples-grid ">
405415 < div class ="example-card ">
406416 < h3 > Domain Rules</ h3 >
407417 < p > Make invalid values fail where they enter the script instead of leaking further into host-side code.</ p >
408- < pre > < code > < span class ="k "> type</ span > Discount < span class ="t "> int</ span > < span class ="k "> range</ span > 0..100
418+ < pre > < code > < span class ="k "> type</ span > Currency < span class ="t "> string</ span > < span class ="k "> predicate</ span > < span class ="k "> func</ span > (s) {
419+ < span class ="k "> return</ span > s == < span class ="s "> "USD"</ span > < span class ="k "> or</ span > s == < span class ="s "> "EUR"</ span >
420+ }
421+ < span class ="k "> type</ span > Discount < span class ="t "> int</ span > < span class ="k "> range</ span > 0..100
422+
423+ currency := Currency(< span class ="s "> "EUR"</ span > )
409424sale := Discount(15)</ code > </ pre >
410425 </ div >
411426 < div class ="example-card ">
412427 < h3 > Policy Logic</ h3 >
413428 < p > Decision logic can carry domain constraints directly instead of relying on the host to validate every input first.</ p >
414429 < pre > < code > < span class ="k "> type</ span > EventCode < span class ="t "> int</ span > < span class ="k "> predicate</ span > < span class ="k "> func</ span > (x) {
415- < span class ="k "> return</ span > x % 2 == 0
430+ < span class ="k "> return</ span > x < span class ="k "> rem</ span > 2 == 0
431+ }
432+ < span class ="k "> type</ span > SourceId < span class ="t "> string</ span > < span class ="k "> predicate</ span > < span class ="k "> func</ span > (s) {
433+ < span class ="k "> return</ span > s == < span class ="s "> "sensor-a"</ span > < span class ="k "> or</ span > s == < span class ="s "> "sensor-b"</ span >
416434}
417435
418436< span class ="k "> pub func</ span > accept(code < span class ="t "> int</ span > , source < span class ="t "> string</ span > ) < span class ="t "> bool</ span > {
419437 c := EventCode(code)
420- < span class ="k "> return</ span > c == EventCode(42) < span class ="k "> and</ span > source == < span class ="s "> "sensor-a"</ span >
438+ s := SourceId(source)
439+ < span class ="k "> return</ span > c == EventCode(42) < span class ="k "> and</ span > s == SourceId(< span class ="s "> "sensor-a"</ span > )
421440}</ code > </ pre >
422441 </ div >
423442 < div class ="example-card ">
424443 < h3 > Host-Granted Access</ h3 >
425444 < p > Imports are explicit. Filesystem, HTTP, and host modules exist only when the embedding application exposes them.</ p >
426445 < pre > < code > http := < span class ="k "> import</ span > (< span class ="s "> "cap:http"</ span > )
427- resp, err := http.get(< span class ="s "> "https://example.com/data"</ span > )</ code > </ pre >
446+ cfg := < span class ="k "> import</ span > (< span class ="s "> "host:deploy"</ span > )
447+
448+ resp, err := http.get(cfg.healthcheck_url())
449+ ok := err == < span class ="k "> null</ span > </ code > </ pre >
428450 </ div >
429451 </ div >
430452 </ div >
0 commit comments