A classe Path<T> é responsável por manipular padrões de caminhos (URLs ou caminhos de sistema) que podem conter parâmetros tipados.

Responsabilidades:

  • Análise de padrões: Processa strings de caminho e extrai seus componentes e parâmetros.
  • Correspondência de caminhos: Verifica se um caminho corresponde ao padrão definido.
  • Extração de dados: Extrai valores tipados de parâmetros a partir de caminhos.
  • Construção de caminhos: Constrói caminhos baseados em objetos de dados.

Exemplo de uso:

// Definindo um caminho com parâmetros
var userPath:Path<{id:Int, name:String}> = '/users/{id:Int}/{name:String}';

// Verificando se um caminho corresponde ao padrão
var matchResult = userPath.match('/users/42/john');

// Extraindo parâmetros de um caminho
var userData = userPath.extract('/users/42/john'); // {id: 42, name: "john"}

// Construindo um caminho a partir de dados
var path = userPath.build({id: 42, name: "john"}); // "/users/42/john"

Tipos suportados:

Os seguintes tipos são suportados para parâmetros em caminhos: - Int: Valores inteiros (ex: {id:Int} aceita "42", "0", "-10") - String: Valores de texto (ex: {name:String} aceita qualquer texto) - Float: Números decimais (ex: {price:Float} aceita "42.99", "0.5") - Bool: Valores booleanos (ex: {active:Bool} aceita "true" ou "false")

Sintaxe para definir um parâmetro: {nome:Tipo}

Methods

build(this:String, data:T):String

Constrói uma string de caminho substituindo os parâmetros pelos valores correspondentes no objeto de dados fornecido.

Exemplo:

// Definir um caminho com múltiplos tipos de parâmetros
var path:Path<{id:Int, name:String, active:Bool}> = '/users/{id:Int}/{name:String}/status/{active:Bool}';

// Construir um caminho a partir de um objeto
var url = path.build({id: 42, name: "john doe", active: true});
// "/users/42/john%20doe/status/true"

// Valores não fornecidos recebem valores padrão
var url2 = path.build({id: 123});
// "/users/123//status/false"

Parameters:

data

Um objeto contendo os valores para os parâmetros definidos no caminho.

Returns:

Uma string representando o caminho construído com os dados fornecidos.

extract(this:String, path:String):T

Extrai os valores dos parâmetros de um caminho e os retorna como um objeto tipado.

Exemplo:

// Definir um caminho com parâmetros de diferentes tipos
var path:Path<{id:Int, balance:Float, premium:Bool}> = '/account/{id:Int}/{balance:Float}/type/{premium:Bool}';

// Extrair valores de um caminho real
var data = path.extract('/account/1001/1250.75/type/true');
// {id: 1001, balance: 1250.75, premium: true}

// Com um caminho que não corresponde ao padrão
var invalid = path.extract('/account/abc/1250.75/type/true');
// null (porque "abc" não é um Int válido)

Parameters:

path

A string de caminho da qual os dados serão extraídos.

Returns:

Um objeto tipado contendo os valores extraídos dos parâmetros, ou null se o caminho não corresponder ao padrão.

match(this:String, toMatch:String):PathMatchData

Verifica se uma string de caminho corresponde ao padrão definido nesta instância. Se houver correspondência, extrai os valores dos parâmetros no caminho.

Exemplo:

// Verificar correspondência com parâmetros
var path:Path<Dynamic> = '/users/{id:Int}/{name:String}';
var result = path.match('/users/42/john');
// {matched: true, params: [{param: "id", value: 42, type: INT}, {param: "name", value: "john", type: STRING}]}

// Verificar uma correspondência inválida
var invalidResult = path.match('/users/abc/john');
// {matched: false, params: []} (falha porque "abc" não é um Int válido)

Parameters:

toMatch

A string de caminho que será verificada contra o padrão.

Returns:

Um objeto PathMatchData contendo o resultado da correspondência e, se bem-sucedido, os parâmetros extraídos.

params(this:String):Array<PathParamData>

Retorna uma lista de todos os parâmetros definidos no caminho.

Exemplo:

var path:Path<Dynamic> = '/users/{id:Int}/{name:String}';
var parameters = path.params(); 
// [{param: "id", type: INT}, {param: "name", type: STRING}]

Returns:

Um array de objetos PathParamData representando os parâmetros.

parts(this:String):Array<PathPartData>

Analisa o caminho e retorna uma lista de partes que o compõem. As partes podem ser strings literais ou parâmetros tipados.

Exemplo:

var path:Path<Dynamic> = '/users/{id:Int}';
var parts = path.parts(); 
// [{part: "users", is_param: false}, {part: "{id:Int}", is_param: true, param: "id", type: INT}]

Returns:

Um array de objetos PathPartData representando cada parte do caminho.

@:toinlinetoString(this:String):String

Converte a instância de Path<T> para uma representação String.

Exemplo:

var path:Path<Dynamic> = '/users/{id:Int}';
var str:String = path.toString(); // "/users/{id:Int}"

Returns:

O caminho como uma string.