Skip to content

TemplateService

TemplateServices are now implicit

Catwork previously had an explicit method called Catwork.TemplateService, this has since been removed. You now simply need to use one of two methods to enable templates

return Catwork.Service {
    EnableTemplates = true
}
return Catwork.Service {
    TemplateAdded = function(self, template)

    end
}

TemplateServices are an extension to Services that allow them to create Templates. Templates are small objects that can be used to create lots of Fragments with a similar shape.

Note

The name TemplateService refers to an older implementation of this feature, Template methods are now simply mounted directly to a Service object if it detects that it is one.

Template

Defining a Template

Templates can be defined with the Service:Template constructor

Service:Template {
    Name = "Template",
    CreateFragment = function(_, self)

    end
}

This creates a unique Template for the service, the CreateFragment callback is fired when creating a new Fragment against the Template.

Creating a Template

To create a Template, you use Service:CreateFragmentFromTemplate, although, many Services omit this externally, opting to use an abstraction.

Service:CreateFragmentFromTemplate(template, {
    -- initial parameters
})

Dont give this templates from other services

This creates undefined behaviour, keep templates to their own service.

The following graph explains the lifecycle of Template construction:

    flowchart LR
    A["Service:CreateFragmentFromTemplate"]
    B["CreateFragment"]
    C["Service.Fragment"]
    D["Fragment Construction"]

    A--->B
    B--->C
    C-.->D

TemplateAdded

To react to when new Templates are created, you can add a TemplateAdded callback to your Service:

Catwork.Service {
    ...

    TemplateAdded = function(self, Template)
        print(`new template: {Template.Name}`)
    end
}

The existence of this callback tells Catwork this is a TemplateService, though you can also explicitly tell it that the Service is one through EnableTemplates

Catwork.Service {
    Name = "SomeService",
    EnableTemplates = true
}