#
# Autogenerated by Thrift
#
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
#

require 'thrift/protocol'

class ThriftHandle
  include Thrift::Struct
  Thrift::Struct.field_accessor self, :id
  FIELDS = {
    -1 => {:type => Thrift::Types::I64, :name => 'id'}
  }
end

class Pathname
  include Thrift::Struct
  Thrift::Struct.field_accessor self, :pathname
  FIELDS = {
    -1 => {:type => Thrift::Types::STRING, :name => 'pathname'}
  }
end

class FileStatus
  include Thrift::Struct
  Thrift::Struct.field_accessor self, :path, :length, :isdir, :block_replication, :blocksize, :modification_time, :permission, :owner, :group
  FIELDS = {
    1 => {:type => Thrift::Types::STRING, :name => 'path'},
    2 => {:type => Thrift::Types::I64, :name => 'length'},
    3 => {:type => Thrift::Types::BOOL, :name => 'isdir'},
    4 => {:type => Thrift::Types::I16, :name => 'block_replication'},
    5 => {:type => Thrift::Types::I64, :name => 'blocksize'},
    6 => {:type => Thrift::Types::I64, :name => 'modification_time'},
    7 => {:type => Thrift::Types::STRING, :name => 'permission'},
    8 => {:type => Thrift::Types::STRING, :name => 'owner'},
    9 => {:type => Thrift::Types::STRING, :name => 'group'}
  }
end

class BlockLocation
  include Thrift::Struct
  Thrift::Struct.field_accessor self, :hosts, :names, :offset, :length
  FIELDS = {
    1 => {:type => Thrift::Types::LIST, :name => 'hosts', :element => {:type => Thrift::Types::STRING}},
    2 => {:type => Thrift::Types::LIST, :name => 'names', :element => {:type => Thrift::Types::STRING}},
    3 => {:type => Thrift::Types::I64, :name => 'offset'},
    4 => {:type => Thrift::Types::I64, :name => 'length'}
  }
end

class MalformedInputException < StandardError
  include Thrift::Struct
  def initialize(message=nil)
    super()
    self.message = message
  end

  Thrift::Struct.field_accessor self, :message
  FIELDS = {
    -1 => {:type => Thrift::Types::STRING, :name => 'message'}
  }
end

class ThriftIOException < StandardError
  include Thrift::Struct
  def initialize(message=nil)
    super()
    self.message = message
  end

  Thrift::Struct.field_accessor self, :message
  FIELDS = {
    -1 => {:type => Thrift::Types::STRING, :name => 'message'}
  }
end

