import ceylon.ast.core {
    Annotations,
    Declaration,
    ExtendedType,
    Statement,
    ValueConstructorDefinition
}

"""Creates a value constructor definition.
   
   Usage example:
   
       valueConstructorDefinition {
           name = "red";
           annotations = annotations {
               "The color red.";
               "shared"
           };
           
           ValueSpecification {
               qualifier = This();
               name = lidentifier("rgb");
               specifier = Specifier(IntegerLiteral("#FF0000"));
           }
       }"""
shared ValueConstructorDefinition valueConstructorDefinition(
    name,
    block = [],
    extendedType = null,
    annotations = Annotations()) {
    
    IdentifierIsh name;
    {Declaration|Statement*} block;
    ExtendedType? extendedType;
    Annotations annotations;
    
    return ValueConstructorDefinition {
        name = lidentifier(name);
        block = package.block(block);
        extendedType = extendedType;
        annotations = annotations;
    };
}