return {
  summary = 'Push a message onto the Channel.',
  description = [[
    Pushes a message onto the Channel.  The following types of data can be pushed: nil, boolean,
    number, string, lightuserdata, vectors, and userdata (LÖVR objects).  Notably, tables are not
    currently supported and should be serialized to strings.
  ]],
  arguments = {
    message = {
      type = '*',
      description = 'The message to push.'
    },
    wait = {
      type = 'number',
      default = 'false',
      description = [[
        How long to wait for the message to be popped, in seconds.  `true` can be used to wait
        forever and `false` can be used to avoid waiting.
      ]]
    }
  },
  returns = {
    id = {
      type = 'number',
      description = 'The ID of the pushed message.'
    },
    read = {
      type = 'boolean',
      description = 'Whether the message was read by another thread before the wait timeout.'
    }
  },
  variants = {
    {
      arguments = { 'message', 'wait' },
      returns = { 'id', 'read' }
    }
  },
  notes = 'Threads can get stuck forever waiting on Channel messages, so be careful.',
  related = {
    'Channel:pop',
    'Channel:hasRead'
  }
}
