__version__ = '0.1.0'

from .composer import Composer, ComposerError, parse_action_name

_composer = Composer()

def composition(name, task):
    return _composer.composition(name, task)

def seq(*arguments):
    return _composer.sequence(*arguments)

def sequence(*arguments):
    return _composer.sequence(*arguments)

def literal(value):
    return _composer.literal(value)

def action(name, action=None):
    return _composer.action(name, action)

def task(task):
    return _composer.task(task)

def function(value):
    return _composer.function(value)

def when(test, consequent, alternate=None):
    return _composer.when(test, consequent, alternate)

def when_nosave(test, consequent, alternate=None):
    return _composer.when_nosave(test, consequent, alternate)

def loop(test, body):
    return _composer.loop(test, body)

def loop_nosave(test, body):
    return _composer.loop_nosave(test, body)

def do(body, handler):
    return _composer._compose('try', (body, handler))

def doloop(body, test):
    return _composer.doloop(body, test)

def doloop_nosave(body, test):
    return _composer.doloop_nosave(body, test)

def ensure(body, finalizer):
    return _composer._compose('finally', (body, finalizer))

def let(declarations, *arguments):
    return _composer._compose('let', (declarations, *arguments))

def mask(*arguments):
    return _composer._compose('mask', arguments)

def retain(*arguments):
    return _composer._compose('retain', arguments)

def retain_catch(*arguments):
    return _composer.retain_catch(*arguments)

def repeat(count, *arguments):
    return _composer._compose('repeat', (count, *arguments))

def retry(count, *arguments):
    return _composer._compose('retry', (count, *arguments))

def deserialize(composition):
    return _composer.deserialize(composition)

def encode(composition, localcombinators=[]):
    return _composer.encode(composition, localcombinators)

def lower(composition, combinators = []):
    return _composer.lower(composition, combinators)

def openwhisk(options):
    return _composer.openwhisk(options)
