/**
 * Copyright (c) 2021 Dominic Masters
 * 
 * This software is released under the MIT License.
 * https://opensource.org/licenses/MIT
 */

#pragma once
#include "../libs.h"

#define STRING_HANDLEBAR_KEY_MAXLENGTH 32

#define STRING_STACK_STRING_SIZE 256
#define STRING_STACK_STRING_COUNT 128
#define STRING_STACK_BUFFER STRING_STACK_STRING_SIZE * STRING_STACK_STRING_COUNT

/** Representation of a String Handlebar Variable */
typedef struct {
  /** The key to use to replace in the source */
  char *key;
  /** The value to replace it with */
  char *value;
} stringhandlebarvariable_t;

/** Definition of a string stack to push and pop strings from. */
typedef struct {
  /** Raw char buffer, for holding strings */
  char buffer[STRING_STACK_BUFFER];
  /** Strings themselves */
  char *strings[STRING_STACK_STRING_COUNT];
  /** How many strings are on the stack */
  int32_t size;
} stringstack_t;