title: How to distinguish not provided and empty array in grpc service?
body: <p>See <a href="https://github.com/grpc/grpc-node/issues/1202" rel="noreferrer">https://github.com/grpc/grpc-node/issues/1202</a>.</p>
  
  <p>Usually in CRUD operations, the value not provided means do not change that field, and the empty array [] means to clear all items inside that field.</p>
  
  <p>But if you tries to implement CRUD operations and provide them as services via grpc, then the above scenario is hard to implement.</p>
  
  <pre><code>service CRUD {
    rpc updateTable(updateRequest) returns updateResponse {}
  }
  
  message updateRequest {
    repeated string a = 1;
    string b = 2;
  }
  
  message updateResponse {
    boolean success = 1;
  }
  </code></pre>
  
  <p>If you load the package with default options, then the client can't delete items of a by </p>
  
  <pre><code>client.CRUD.updateTable({a: []})
  </code></pre>
  
  <p>because the argument <code>{a: []}</code> becomes <code>{}</code> when it arrives the server side.</p>
  
  <p>If you load the package with options {arrays: true}, then the field <code>a</code> will be cleared unintentionally while client side only tries to update other fields:</p>
  
  <pre><code>client.CRUD.updateTable({b: 'updated value'}) 
  </code></pre>
  
  <p>because the argument <code>{b: 'updated value'}</code> becomes <code>{a: [], b: 'updated value'}</code> when it arrives the server side.</p>
  
  <p>Can anyone share some better ideas regards how to handle these 2 scenarios with <code>grpc-node</code> and  <code>proto3</code>?</p>