#include "runtime/util/utf.h"

ssize_t
encode_utf8(uint8_t  *out,
            uint32_t in)
{
  if(in < 0x80)
  {
    if(out != NULL)
      *out++ = in;
    return 1;
  }
  else if(in < 0x800)
  {
    if(out != NULL)
    {
      *out++ = (in >> 6) + 0xC0;
      *out++ = (in & 0x3F) + 0x80;
    }
    return 2;
  }
  else if(in < 0x10000)
  {
    if(out != NULL)
    {
      *out++ = (in >> 12) + 0xE0;
      *out++ = ((in >> 6) & 0x3F) + 0x80;
      *out++ = (in & 0x3F) + 0x80;
    }
    return 3;
  }
  else if(in < 0x110000)
  {
    if(out != NULL)
    {
      *out++ = (in >> 18) + 0xF0;
      *out++ = ((in >> 12) & 0x3F) + 0x80;
      *out++ = ((in >> 6) & 0x3F) + 0x80;
      *out++ = (in & 0x3F) + 0x80;
    }
    return 4;
  }

  return -1;
}