module Restrict

export withLoop, buildOptUsage, checkKeepReturn, checkKeepArg, retrieve_records


func withLoop(xs: []string):
  for x <- xs:
    s: *string
    s <<- x

func buildOpt() -> ?string:
  s: *string
  s <<- "none"
  <- s

func buildOptUsage():
  a <- buildOpt()
  b <- buildOpt()
  for x <- b:
    z <- buildOpt()

func keepReturn() -> *string:
  s: *string
  s <<- "should be not restricted"
  <- s

func checkKeepReturn() -> []string:
  s <- keepReturn()
  s <<- "and more"
  <- s

func keepArg(arg: *string) -> []string:
  arg <<- "push more"
  <- arg

func checkKeepArg() -> []string, []string:
  a: *string
  keepArg(a)
  y <- keepArg(a)
  a <<- "more"
  <- a, y
  
-- failing Aqua code:
service TestService("test-service"):
    get_records(key: string) -> []string

func append_records(peer: string, srum: *[]string):
  srum <- TestService.get_records(peer)

func retrieve_records(peer: string) -> [][]string:
    records: *[]string
    append_records(peer, records)
    <- records