code: public static AttributeValue attrValueOf(Object value) {
          final AttributeValue attrVal = new AttributeValue();
  
          if (value == null) {
              attrVal.withNULL(Boolean.TRUE);
          } else {
              final Type<Object> type = N.typeOf(value.getClass());
  
              if (type.isNumber()) {
                  attrVal.setN(type.stringOf(value));
              } else if (type.isBoolean()) {
                  attrVal.setBOOL((Boolean) value);
              } else if (type.isByteBuffer()) {
                  attrVal.setB((ByteBuffer) value);
              } else {
                  attrVal.setS(type.stringOf(value));
              }
          }
  
          return attrVal;
      }
docs: Set value to <code>null</code> by <code>withNULL(Boolean.TRUE)</code> if the specified value is null,
  or set it to <code>Boolean</code> by <code>setBOOL((Boolean) value)</code> if it's <code>Boolean</code>,
  or set it to <code>ByteBuffer</code> by <code>setB((ByteBuffer) value)</code> if it's <code>ByteBuffer</code>,
  otherwise, set it to String by <code>setS(N.stringOf(value))</code> for other types.
  That's to say all the types except Number/Boolean/ByteBuffer are defined to String.
  
  @param value
  @return