Use Cow in favor of take.
This commit is contained in:
parent
a36e8069f4
commit
3352c2067f
|
@ -5,14 +5,14 @@ package models.proto.cofd.api;
|
||||||
|
|
||||||
message CharacterIdentifier {
|
message CharacterIdentifier {
|
||||||
string owner = 1;
|
string owner = 1;
|
||||||
int32 character_id = 2;
|
int32 id = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Update basic information about a Chronicles of Darkness (or
|
//Update basic information about a Chronicles of Darkness (or
|
||||||
//derivative system) character sheet. This is a straight overwrite of
|
//derivative system) character sheet. This is a straight overwrite of
|
||||||
//all basic information on the sheet.
|
//all basic information on the sheet.
|
||||||
message UpdateBasicInfoRequest {
|
message UpdateBasicInfoRequest {
|
||||||
CharacterIdentifier id = 1;
|
CharacterIdentifier character = 1;
|
||||||
reserved 2;
|
reserved 2;
|
||||||
// string owner = 1;
|
// string owner = 1;
|
||||||
// int32 character_id = 2;
|
// int32 character_id = 2;
|
||||||
|
|
|
@ -8,8 +8,8 @@ export class CharacterIdentifier extends jspb.Message {
|
||||||
getOwner(): string;
|
getOwner(): string;
|
||||||
setOwner(value: string): void;
|
setOwner(value: string): void;
|
||||||
|
|
||||||
getCharacterId(): number;
|
getId(): number;
|
||||||
setCharacterId(value: number): void;
|
setId(value: number): void;
|
||||||
|
|
||||||
serializeBinary(): Uint8Array;
|
serializeBinary(): Uint8Array;
|
||||||
toObject(includeInstance?: boolean): CharacterIdentifier.AsObject;
|
toObject(includeInstance?: boolean): CharacterIdentifier.AsObject;
|
||||||
|
@ -24,15 +24,15 @@ export class CharacterIdentifier extends jspb.Message {
|
||||||
export namespace CharacterIdentifier {
|
export namespace CharacterIdentifier {
|
||||||
export type AsObject = {
|
export type AsObject = {
|
||||||
owner: string,
|
owner: string,
|
||||||
characterId: number,
|
id: number,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class UpdateBasicInfoRequest extends jspb.Message {
|
export class UpdateBasicInfoRequest extends jspb.Message {
|
||||||
hasId(): boolean;
|
hasCharacter(): boolean;
|
||||||
clearId(): void;
|
clearCharacter(): void;
|
||||||
getId(): CharacterIdentifier | undefined;
|
getCharacter(): CharacterIdentifier | undefined;
|
||||||
setId(value?: CharacterIdentifier): void;
|
setCharacter(value?: CharacterIdentifier): void;
|
||||||
|
|
||||||
getName(): string;
|
getName(): string;
|
||||||
setName(value: string): void;
|
setName(value: string): void;
|
||||||
|
@ -61,7 +61,7 @@ export class UpdateBasicInfoRequest extends jspb.Message {
|
||||||
|
|
||||||
export namespace UpdateBasicInfoRequest {
|
export namespace UpdateBasicInfoRequest {
|
||||||
export type AsObject = {
|
export type AsObject = {
|
||||||
id?: CharacterIdentifier.AsObject,
|
character?: CharacterIdentifier.AsObject,
|
||||||
name: string,
|
name: string,
|
||||||
gender: string,
|
gender: string,
|
||||||
concept: string,
|
concept: string,
|
||||||
|
|
|
@ -247,7 +247,7 @@ proto.models.proto.cofd.api.CharacterIdentifier.prototype.toObject = function(op
|
||||||
proto.models.proto.cofd.api.CharacterIdentifier.toObject = function(includeInstance, msg) {
|
proto.models.proto.cofd.api.CharacterIdentifier.toObject = function(includeInstance, msg) {
|
||||||
var f, obj = {
|
var f, obj = {
|
||||||
owner: jspb.Message.getFieldWithDefault(msg, 1, ""),
|
owner: jspb.Message.getFieldWithDefault(msg, 1, ""),
|
||||||
characterId: jspb.Message.getFieldWithDefault(msg, 2, 0)
|
id: jspb.Message.getFieldWithDefault(msg, 2, 0)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (includeInstance) {
|
if (includeInstance) {
|
||||||
|
@ -290,7 +290,7 @@ proto.models.proto.cofd.api.CharacterIdentifier.deserializeBinaryFromReader = fu
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
var value = /** @type {number} */ (reader.readInt32());
|
var value = /** @type {number} */ (reader.readInt32());
|
||||||
msg.setCharacterId(value);
|
msg.setId(value);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
reader.skipField();
|
reader.skipField();
|
||||||
|
@ -328,7 +328,7 @@ proto.models.proto.cofd.api.CharacterIdentifier.serializeBinaryToWriter = functi
|
||||||
f
|
f
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
f = message.getCharacterId();
|
f = message.getId();
|
||||||
if (f !== 0) {
|
if (f !== 0) {
|
||||||
writer.writeInt32(
|
writer.writeInt32(
|
||||||
2,
|
2,
|
||||||
|
@ -357,10 +357,10 @@ proto.models.proto.cofd.api.CharacterIdentifier.prototype.setOwner = function(va
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* optional int32 character_id = 2;
|
* optional int32 id = 2;
|
||||||
* @return {number}
|
* @return {number}
|
||||||
*/
|
*/
|
||||||
proto.models.proto.cofd.api.CharacterIdentifier.prototype.getCharacterId = function() {
|
proto.models.proto.cofd.api.CharacterIdentifier.prototype.getId = function() {
|
||||||
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
|
return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -369,7 +369,7 @@ proto.models.proto.cofd.api.CharacterIdentifier.prototype.getCharacterId = funct
|
||||||
* @param {number} value
|
* @param {number} value
|
||||||
* @return {!proto.models.proto.cofd.api.CharacterIdentifier} returns this
|
* @return {!proto.models.proto.cofd.api.CharacterIdentifier} returns this
|
||||||
*/
|
*/
|
||||||
proto.models.proto.cofd.api.CharacterIdentifier.prototype.setCharacterId = function(value) {
|
proto.models.proto.cofd.api.CharacterIdentifier.prototype.setId = function(value) {
|
||||||
return jspb.Message.setProto3IntField(this, 2, value);
|
return jspb.Message.setProto3IntField(this, 2, value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -406,7 +406,7 @@ proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.toObject = function
|
||||||
*/
|
*/
|
||||||
proto.models.proto.cofd.api.UpdateBasicInfoRequest.toObject = function(includeInstance, msg) {
|
proto.models.proto.cofd.api.UpdateBasicInfoRequest.toObject = function(includeInstance, msg) {
|
||||||
var f, obj = {
|
var f, obj = {
|
||||||
id: (f = msg.getId()) && proto.models.proto.cofd.api.CharacterIdentifier.toObject(includeInstance, f),
|
character: (f = msg.getCharacter()) && proto.models.proto.cofd.api.CharacterIdentifier.toObject(includeInstance, f),
|
||||||
name: jspb.Message.getFieldWithDefault(msg, 3, ""),
|
name: jspb.Message.getFieldWithDefault(msg, 3, ""),
|
||||||
gender: jspb.Message.getFieldWithDefault(msg, 4, ""),
|
gender: jspb.Message.getFieldWithDefault(msg, 4, ""),
|
||||||
concept: jspb.Message.getFieldWithDefault(msg, 5, ""),
|
concept: jspb.Message.getFieldWithDefault(msg, 5, ""),
|
||||||
|
@ -451,7 +451,7 @@ proto.models.proto.cofd.api.UpdateBasicInfoRequest.deserializeBinaryFromReader =
|
||||||
case 1:
|
case 1:
|
||||||
var value = new proto.models.proto.cofd.api.CharacterIdentifier;
|
var value = new proto.models.proto.cofd.api.CharacterIdentifier;
|
||||||
reader.readMessage(value,proto.models.proto.cofd.api.CharacterIdentifier.deserializeBinaryFromReader);
|
reader.readMessage(value,proto.models.proto.cofd.api.CharacterIdentifier.deserializeBinaryFromReader);
|
||||||
msg.setId(value);
|
msg.setCharacter(value);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
var value = /** @type {string} */ (reader.readString());
|
var value = /** @type {string} */ (reader.readString());
|
||||||
|
@ -502,7 +502,7 @@ proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.serializeBinary = f
|
||||||
*/
|
*/
|
||||||
proto.models.proto.cofd.api.UpdateBasicInfoRequest.serializeBinaryToWriter = function(message, writer) {
|
proto.models.proto.cofd.api.UpdateBasicInfoRequest.serializeBinaryToWriter = function(message, writer) {
|
||||||
var f = undefined;
|
var f = undefined;
|
||||||
f = message.getId();
|
f = message.getCharacter();
|
||||||
if (f != null) {
|
if (f != null) {
|
||||||
writer.writeMessage(
|
writer.writeMessage(
|
||||||
1,
|
1,
|
||||||
|
@ -549,10 +549,10 @@ proto.models.proto.cofd.api.UpdateBasicInfoRequest.serializeBinaryToWriter = fun
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* optional CharacterIdentifier id = 1;
|
* optional CharacterIdentifier character = 1;
|
||||||
* @return {?proto.models.proto.cofd.api.CharacterIdentifier}
|
* @return {?proto.models.proto.cofd.api.CharacterIdentifier}
|
||||||
*/
|
*/
|
||||||
proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.getId = function() {
|
proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.getCharacter = function() {
|
||||||
return /** @type{?proto.models.proto.cofd.api.CharacterIdentifier} */ (
|
return /** @type{?proto.models.proto.cofd.api.CharacterIdentifier} */ (
|
||||||
jspb.Message.getWrapperField(this, proto.models.proto.cofd.api.CharacterIdentifier, 1));
|
jspb.Message.getWrapperField(this, proto.models.proto.cofd.api.CharacterIdentifier, 1));
|
||||||
};
|
};
|
||||||
|
@ -562,7 +562,7 @@ proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.getId = function()
|
||||||
* @param {?proto.models.proto.cofd.api.CharacterIdentifier|undefined} value
|
* @param {?proto.models.proto.cofd.api.CharacterIdentifier|undefined} value
|
||||||
* @return {!proto.models.proto.cofd.api.UpdateBasicInfoRequest} returns this
|
* @return {!proto.models.proto.cofd.api.UpdateBasicInfoRequest} returns this
|
||||||
*/
|
*/
|
||||||
proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.setId = function(value) {
|
proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.setCharacter = function(value) {
|
||||||
return jspb.Message.setWrapperField(this, 1, value);
|
return jspb.Message.setWrapperField(this, 1, value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -571,8 +571,8 @@ proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.setId = function(va
|
||||||
* Clears the message field making it undefined.
|
* Clears the message field making it undefined.
|
||||||
* @return {!proto.models.proto.cofd.api.UpdateBasicInfoRequest} returns this
|
* @return {!proto.models.proto.cofd.api.UpdateBasicInfoRequest} returns this
|
||||||
*/
|
*/
|
||||||
proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.clearId = function() {
|
proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.clearCharacter = function() {
|
||||||
return this.setId(undefined);
|
return this.setCharacter(undefined);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -580,7 +580,7 @@ proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.clearId = function(
|
||||||
* Returns whether this field is set.
|
* Returns whether this field is set.
|
||||||
* @return {boolean}
|
* @return {boolean}
|
||||||
*/
|
*/
|
||||||
proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.hasId = function() {
|
proto.models.proto.cofd.api.UpdateBasicInfoRequest.prototype.hasCharacter = function() {
|
||||||
return jspb.Message.getField(this, 1) != null;
|
return jspb.Message.getField(this, 1) != null;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ import * as api from "../api";
|
||||||
|
|
||||||
function characterId(): CharacterIdentifier {
|
function characterId(): CharacterIdentifier {
|
||||||
const id = new CharacterIdentifier();
|
const id = new CharacterIdentifier();
|
||||||
id.setCharacterId(parseInt(CHARACTER_ID));
|
id.setId(parseInt(CHARACTER_ID));
|
||||||
id.setOwner(USERNAME);
|
id.setOwner(USERNAME);
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ import * as api from "../api";
|
||||||
async function updateInfo() {
|
async function updateInfo() {
|
||||||
const params = new UpdateBasicInfoRequest();
|
const params = new UpdateBasicInfoRequest();
|
||||||
|
|
||||||
params.setId(characterId());
|
params.setCharacter(characterId());
|
||||||
params.setName(getTextValue("#characterName"));
|
params.setName(getTextValue("#characterName"));
|
||||||
params.setAge(getIntValue("#age"));
|
params.setAge(getIntValue("#age"));
|
||||||
params.setConcept(getTextValue("#concept"));
|
params.setConcept(getTextValue("#concept"));
|
||||||
|
|
|
@ -14,21 +14,30 @@ pub mod api {
|
||||||
//include!(concat!(env!("OUT_DIR"), "/models.proto.cofd.api.rs"));
|
//include!(concat!(env!("OUT_DIR"), "/models.proto.cofd.api.rs"));
|
||||||
tonic::include_proto!("models.proto.cofd.api");
|
tonic::include_proto!("models.proto.cofd.api");
|
||||||
|
|
||||||
/// Trait to take ownership of CharacterIdentifiers while avoiding
|
use std::borrow::Cow;
|
||||||
/// clone. The identifier is extracted out of the type, leaving a
|
|
||||||
/// default value in its place.
|
/// Trait to extract values out of a CharacterIdentifier whose
|
||||||
|
/// instance may or may not exist on an API request.
|
||||||
pub trait DefaultCharacterIdentifier {
|
pub trait DefaultCharacterIdentifier {
|
||||||
/// Take ownership of a CharacterIdentifier by taking it out
|
/// Retrieve the specified owner, or a default fallback (empty
|
||||||
/// of the containing type, leaving behind a default value
|
/// string). Will not allocate if the owner is present in the
|
||||||
/// (None, in the case of Option) in its place.
|
/// request.
|
||||||
fn extract(&mut self) -> CharacterIdentifier;
|
fn owner(&self) -> Cow<'_, str>;
|
||||||
|
|
||||||
|
/// Retrieve the character ID specified, or the default i32
|
||||||
|
/// value (0).
|
||||||
|
fn id(&self) -> i32;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DefaultCharacterIdentifier for Option<CharacterIdentifier> {
|
impl DefaultCharacterIdentifier for Option<CharacterIdentifier> {
|
||||||
/// Extract the identifier, or a default one if the identifier
|
fn owner(&self) -> Cow<'_, str> {
|
||||||
/// is not specified for some reason.
|
self.as_ref()
|
||||||
fn extract(&mut self) -> CharacterIdentifier {
|
.map(|ident| Cow::from(&ident.owner))
|
||||||
self.take().unwrap_or_default()
|
.unwrap_or_default()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn id(&self) -> i32 {
|
||||||
|
self.as_ref().map(|ident| ident.id).unwrap_or_default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,12 +40,13 @@ fn find_skill<'a>(sheet: &'a mut CofdSheet, skill_name: &'a str) -> Option<&'a m
|
||||||
|
|
||||||
#[post("/rpc/cofd/update_basic_info", data = "<req>")]
|
#[post("/rpc/cofd/update_basic_info", data = "<req>")]
|
||||||
pub(super) async fn update_basic_info<'a>(
|
pub(super) async fn update_basic_info<'a>(
|
||||||
mut req: Proto<UpdateBasicInfoRequest>,
|
req: Proto<UpdateBasicInfoRequest>,
|
||||||
conn: TenebrousDbConn<'_>,
|
conn: TenebrousDbConn<'_>,
|
||||||
logged_in_user: Option<&User>,
|
user: Option<&User>,
|
||||||
) -> Result<Proto<ApiResult>, Error> {
|
) -> Result<Proto<ApiResult>, Error> {
|
||||||
let id = req.id.extract();
|
let mut character =
|
||||||
let mut character = load_character(&conn, logged_in_user, &id.owner, id.character_id).await?;
|
load_character(&conn, user, &req.character.owner(), req.character.id()).await?;
|
||||||
|
|
||||||
let mut sheet: CofdSheet = character.try_deserialize()?;
|
let mut sheet: CofdSheet = character.try_deserialize()?;
|
||||||
|
|
||||||
println!("name will now be {}", req.name);
|
println!("name will now be {}", req.name);
|
||||||
|
|
Loading…
Reference in New Issue