title: What is the point of google.protobuf.StringValue?
body: <p>I've recently encountered all sorts of wrappers in Google's <code>protobuf</code> package.  I'm struggling to imagine the use case.  Can anyone shed the light: what problem were these intended to solve?</p>
  
  <p>Here's one of the documentation links: <a href="https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/string-value" rel="noreferrer">https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/string-value</a> (it says nothing about what can this be used for).</p>
  
  <p>One thing that will be different in behavior between this, and simple <code>string</code> type is that this field will be written less efficiently (a couple extra bytes, plus a redundant memory allocation).  For other wrappers, the story is even worse, since the <code>repeated</code> variants of those fields will be written inefficiently (official Google's Protobuf serializer doesn't support <code>packed</code> encoding for non-numeric types).</p>
  
  <p>Neither seems to be desirable.  So, what's this all about?</p>