By following the tutorials and documentation I am able to create a custom field that supports a single string value. However what I'd like to accomplish is a custom list (preferably the checkboxes type) where a user can select different options. I tried looking in core/modules/options schema.yml and copying the storage settings still gives me the same results. I get the error This value should be of the correct primitive type.
These are what I believe are the relevant chunks of code I currently have:
in fieldtype/
  public static function schema(FieldStorageDefinitionInterface $field_definition) {
    return [
      // columns contains the values that the field will store
      'columns' => [
        'value' => [
          'type' => 'text',
          'size' => 'normal',
          'not null' => FALSE,
          'serialize' => TRUE
        ],
      ],
      'indexes' => [
        'value' => ['value'],
      ],
    ];
  }
In FieldWidget/
  public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
    $sglists = ['1' => 'a', '2' => 'b'];
    $element['value'] = $element + [
        '#type' => 'checkboxes',
        '#options' => $sglists,
        '#empty_value' => '',
        '#default_value' => (isset($items[$delta]->value) && isset($sglists[$items[$delta]->value])) ? $items[$delta]->value : NULL,
        '#description' => t('Select a Sendgrid List'),
      ];
    return $element;
  }
in schema.yml
field.storage_settings.sendgridlists:
  label: 'Sendgrid Lists'
  type: mapping
  mapping:
    selectable_lists:
      type: sequence
      label: 'Selectable Lists'
      sequence:
        type: string
I am pretty sure my issue comes from the schema.yml but I'm not really understanding how to turn this from a single value, into a multi value list. (similar to core/modules/options)
Any help is greatly appreciated, included any links to existing contrib modules that successfully create a custom checkboxes field type that I can reference.