text: 'use strict';
  
  const binding = require('./binding');
  
  var DOCUMENT_EXPIRY_MARKER = {};
  
  /**
   *
   * @category Sub-Document
   */
  class LookupInSpec {
    /**
     *
     */
    constructor() {
      this._op = -1;
      this._path = '';
      this._flags = 0;
    }
  
    /**
     * @type {*}
     */
    static get Expiry() {
      return DOCUMENT_EXPIRY_MARKER;
    }
  
    static _create(opType, path, options) {
      if (!options) {
        options = {};
      }
  
      var flags = 0;
  
      if (path === DOCUMENT_EXPIRY_MARKER) {
        path = '$document.exptime';
        flags |= binding.LCB_SUBDOCSPECS_F_XATTRPATH;
      }
  
      if (options.xattr) {
        flags |= binding.LCB_SUBDOCSPECS_F_XATTRPATH;
      }
  
      var spec = new LookupInSpec();
  
      spec._op = opType;
      spec._path = path;
      spec._flags = flags;
  
      return spec;
    }
  
    /**
     *
     * @param {string} path
     * @param {Object} [options]
     *
     * @returns {LookupInSpec}
     */
    static get(path, options) {
      return this._create(binding.LCBX_SDCMD_GET, path, options);
    }
  
    /**
     *
     * @param {string} path
     * @param {Object} [options]
     *
     * @returns {LookupInSpec}
     */
    static exists(path, options) {
      return this._create(binding.LCBX_SDCMD_EXISTS, path, options);
    }
  
    /**
     *
     * @param {string} path
     * @param {Object} [options]
     *
     * @returns {LookupInSpec}
     */
    static count(path, options) {
      return this._create(binding.LCBX_SDCMD_GET_COUNT, path, options);
    }
  }
  
  module.exports = LookupInSpec;
  