mirror of
https://github.com/google/pebble
synced 2026-10-14 23:54:11 +02:00
Import of the watch repository from Pebble
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright 2024 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
//! Variables that change how a template string is evaluated
|
||||
typedef struct TemplateStringVars {
|
||||
time_t current_time;
|
||||
} TemplateStringVars;
|
||||
|
||||
//! Variables that are used for determining when the string must be re-evaluated
|
||||
typedef struct TemplateStringEvalConditions {
|
||||
//! If true, string MUST be re-evaluated on eval_time, regardless of other conditions.
|
||||
//! Otherwise, only re-evaluate if all the other conditions are also true.
|
||||
bool force_eval_on_time;
|
||||
//! Timestamp for next time to re-evaluate the string
|
||||
//! If this is 0, there is no need to re-evaluate based on time
|
||||
time_t eval_time;
|
||||
} TemplateStringEvalConditions;
|
||||
|
||||
//! Bitfield describing errors in a template string
|
||||
typedef enum TemplateStringErrorStatus {
|
||||
//! No error occurred. `index_in_string` is invalid.
|
||||
TemplateStringErrorStatus_Success = 0,
|
||||
//! Couldn't resolve the template string to a final string.
|
||||
TemplateStringErrorStatus_CantResolve,
|
||||
//! Closing curly-brace was missing.
|
||||
TemplateStringErrorStatus_MissingClosingBrace,
|
||||
//! Missing argument.
|
||||
TemplateStringErrorStatus_MissingArgument,
|
||||
//! No result was generated.
|
||||
TemplateStringErrorStatus_NoResultGenerated,
|
||||
//! Unknown filter used.
|
||||
TemplateStringErrorStatus_UnknownFilter,
|
||||
//! format() was not the last filter.
|
||||
TemplateStringErrorStatus_FormatBeforeLast,
|
||||
//! Time unit in predicate is invalid.
|
||||
TemplateStringErrorStatus_InvalidTimeUnit,
|
||||
//! Escape character at end of string.
|
||||
TemplateStringErrorStatus_InvalidEscapeCharacter,
|
||||
//! Opening parenthesis for filter was missing.
|
||||
TemplateStringErrorStatus_MissingOpeningParen,
|
||||
//! Closing parenthesis for filter was missing.
|
||||
TemplateStringErrorStatus_MissingClosingParen,
|
||||
//! Invalid conversion specifier for format.
|
||||
TemplateStringErrorStatus_InvalidConversionSpecifier,
|
||||
//! Invalid parameter.
|
||||
TemplateStringErrorStatus_InvalidParameter,
|
||||
//! Opening quote for filter was missing.
|
||||
TemplateStringErrorStatus_MissingOpeningQuote,
|
||||
//! Closing quote for filter was missing.
|
||||
TemplateStringErrorStatus_MissingClosingQuote,
|
||||
//! Invalid argument separator.
|
||||
TemplateStringErrorStatus_InvalidArgumentSeparator,
|
||||
|
||||
TemplateStringErrorStatusCount,
|
||||
} TemplateStringErrorStatus;
|
||||
|
||||
//! Contains information about a template string error
|
||||
typedef struct TemplateStringError {
|
||||
//! 0-indexed position in the input string where the error occurred.
|
||||
size_t index_in_string;
|
||||
TemplateStringErrorStatus status;
|
||||
} TemplateStringError;
|
||||
|
||||
//! @param input_template_string The template string to evaluate
|
||||
//! @param output A pointer to a string buffer for which to write the evaluated string output upon
|
||||
//! success. May be NULL for no output
|
||||
//! @param output_size The size of the output string buffer in bytes; no bytes beyond this size
|
||||
//! will be written to the output string buffer. This should also include the
|
||||
//! ending NUL terminator. May be 0 for no output
|
||||
//! @param reeval_cond Pointer to a structure that will be filled with information on when to
|
||||
//! re-evaluate the string. Maybe be NULL
|
||||
//! @param vars Pointer to variables that affect how the template string will be evaluated
|
||||
//! @param errors Pointer to a TemplateStringError that will be set to contain information about
|
||||
//! the first error detected in the template string upon failure
|
||||
//! @return True if the template string is successfully evaluated and the output written to the
|
||||
//! provided output string buffer, false otherwise
|
||||
bool template_string_evaluate(const char *input_template_string, char *output, size_t output_size,
|
||||
TemplateStringEvalConditions *reeval_cond,
|
||||
const TemplateStringVars *vars, TemplateStringError *error);
|
||||
Reference in New Issue
Block a user