tag @?
namespace examples.full

// Standard Imports
import std::str::StringBounds

settings {
    indexed-all=false
    allow-debugging=true
}

settings MailSettings(struct, protocol) {
    indexed=true
}

@settings=MailSettings
struct Mail {
    1# sender: str
    2# recipient: str
}

struct Article {
    @validators=[StringBounds(min_chars=3 max_chars=32]
    1# title: str

    @validators=[StringBounds(min_chars=24 max_chars=412]
    2# content: str
}

@hidden
@settings=MailSettings
protocol Mail {
    1# async function send(Mail)
}


// Maximum amount of articles that a provider can send
const SENT_ARTICLES_MAX: u8 = 10

//#provider=Server // TODO: This is the original proposal, it would only dictate direction, below is the new proposal
#provider=Multiple consumer=Multiple // TODO: These parameters need more situational introspection to be documented
protocol Feed {
    // Fetches new articles since last fetch
    @flexible async stream
    #timeout=1000ms per_send_timeout=10s cooldown=10s
    1# function fetch_articles() -> Article[SENT_ARTICLES_MAX]
}
