# src/Struct/ItemString.js

    import { splitHelper, default as Item } from './Item.js'
    import { logItemHelper } from '../MessageHandler/messageToString.js'

    export default class ItemString extends Item {
      constructor () {
        super()
        this._content = null
      }
      _copy () {
        let struct = super._copy()
        struct._content = this._content
        return struct
      }
      get _length () {
        return this._content.length
      }
      _fromBinary (y, decoder) {
        let missing = super._fromBinary(y, decoder)
        this._content = decoder.readVarString()
        return missing
      }
      _toBinary (encoder) {
        super._toBinary(encoder)
        encoder.writeVarString(this._content)
      }
      /**
       * Transform this YXml Type to a readable format.
       * Useful for logging as all Items and Delete implement this method.
       *
       * @private
       */
      _logString () {
        return logItemHelper('ItemString', this, `content:"${this._content}"`)
      }
      _splitAt (y, diff) {
        if (diff === 0) {
          return this
        } else if (diff >= this._length) {
          return this._right
        }
        let item = new ItemString()
        item._content = this._content.slice(diff)
        this._content = this._content.slice(0, diff)
        splitHelper(y, this, item, diff)
        return item
      }
    }