Use i32 to represent Postgres INTEGER types in Rust

This commit is contained in:
Antonio Scandurra 2022-12-02 13:58:54 +01:00
parent dec5f37e4e
commit 48b6ee313f
11 changed files with 52 additions and 51 deletions

View file

@ -76,7 +76,7 @@ pub async fn validate_api_token<B>(req: Request<B>, next: Next<B>) -> impl IntoR
#[derive(Debug, Deserialize)] #[derive(Debug, Deserialize)]
struct AuthenticatedUserParams { struct AuthenticatedUserParams {
github_user_id: Option<u32>, github_user_id: Option<i32>,
github_login: String, github_login: String,
} }
@ -123,14 +123,14 @@ async fn get_users(
#[derive(Deserialize, Debug)] #[derive(Deserialize, Debug)]
struct CreateUserParams { struct CreateUserParams {
github_user_id: u32, github_user_id: i32,
github_login: String, github_login: String,
email_address: String, email_address: String,
email_confirmation_code: Option<String>, email_confirmation_code: Option<String>,
#[serde(default)] #[serde(default)]
admin: bool, admin: bool,
#[serde(default)] #[serde(default)]
invite_count: u32, invite_count: i32,
} }
#[derive(Serialize, Debug)] #[derive(Serialize, Debug)]
@ -204,11 +204,11 @@ async fn create_user(
#[derive(Deserialize)] #[derive(Deserialize)]
struct UpdateUserParams { struct UpdateUserParams {
admin: Option<bool>, admin: Option<bool>,
invite_count: Option<u32>, invite_count: Option<i32>,
} }
async fn update_user( async fn update_user(
Path(user_id): Path<u32>, Path(user_id): Path<i32>,
Json(params): Json<UpdateUserParams>, Json(params): Json<UpdateUserParams>,
Extension(app): Extension<Arc<AppState>>, Extension(app): Extension<Arc<AppState>>,
Extension(rpc_server): Extension<Arc<rpc::Server>>, Extension(rpc_server): Extension<Arc<rpc::Server>>,
@ -230,7 +230,7 @@ async fn update_user(
} }
async fn destroy_user( async fn destroy_user(
Path(user_id): Path<u32>, Path(user_id): Path<i32>,
Extension(app): Extension<Arc<AppState>>, Extension(app): Extension<Arc<AppState>>,
) -> Result<()> { ) -> Result<()> {
app.db.destroy_user(UserId(user_id)).await?; app.db.destroy_user(UserId(user_id)).await?;

View file

@ -159,7 +159,7 @@ impl Database {
pub async fn get_user_by_github_account( pub async fn get_user_by_github_account(
&self, &self,
github_login: &str, github_login: &str,
github_user_id: Option<u32>, github_user_id: Option<i32>,
) -> Result<Option<User>> { ) -> Result<Option<User>> {
self.transact(|tx| async { self.transact(|tx| async {
let tx = tx; let tx = tx;
@ -879,7 +879,7 @@ impl Database {
.await .await
} }
pub async fn set_invite_count_for_user(&self, id: UserId, count: u32) -> Result<()> { pub async fn set_invite_count_for_user(&self, id: UserId, count: i32) -> Result<()> {
self.transact(|tx| async move { self.transact(|tx| async move {
if count > 0 { if count > 0 {
user::Entity::update_many() user::Entity::update_many()
@ -910,11 +910,11 @@ impl Database {
.await .await
} }
pub async fn get_invite_code_for_user(&self, id: UserId) -> Result<Option<(String, u32)>> { pub async fn get_invite_code_for_user(&self, id: UserId) -> Result<Option<(String, i32)>> {
self.transact(|tx| async move { self.transact(|tx| async move {
match user::Entity::find_by_id(id).one(&tx).await? { match user::Entity::find_by_id(id).one(&tx).await? {
Some(user) if user.invite_code.is_some() => { Some(user) if user.invite_code.is_some() => {
Ok(Some((user.invite_code.unwrap(), user.invite_count as u32))) Ok(Some((user.invite_code.unwrap(), user.invite_count)))
} }
_ => Ok(None), _ => Ok(None),
} }
@ -982,9 +982,9 @@ impl Database {
room_participant::ActiveModel { room_participant::ActiveModel {
room_id: ActiveValue::set(room_id), room_id: ActiveValue::set(room_id),
user_id: ActiveValue::set(user_id), user_id: ActiveValue::set(user_id),
answering_connection_id: ActiveValue::set(Some(connection_id.0)), answering_connection_id: ActiveValue::set(Some(connection_id.0 as i32)),
calling_user_id: ActiveValue::set(user_id), calling_user_id: ActiveValue::set(user_id),
calling_connection_id: ActiveValue::set(connection_id.0), calling_connection_id: ActiveValue::set(connection_id.0 as i32),
..Default::default() ..Default::default()
} }
.insert(&tx) .insert(&tx)
@ -1009,7 +1009,7 @@ impl Database {
room_id: ActiveValue::set(room_id), room_id: ActiveValue::set(room_id),
user_id: ActiveValue::set(called_user_id), user_id: ActiveValue::set(called_user_id),
calling_user_id: ActiveValue::set(calling_user_id), calling_user_id: ActiveValue::set(calling_user_id),
calling_connection_id: ActiveValue::set(calling_connection_id.0), calling_connection_id: ActiveValue::set(calling_connection_id.0 as i32),
initial_project_id: ActiveValue::set(initial_project_id), initial_project_id: ActiveValue::set(initial_project_id),
..Default::default() ..Default::default()
} }
@ -1126,7 +1126,7 @@ impl Database {
.and(room_participant::Column::AnsweringConnectionId.is_null()), .and(room_participant::Column::AnsweringConnectionId.is_null()),
) )
.set(room_participant::ActiveModel { .set(room_participant::ActiveModel {
answering_connection_id: ActiveValue::set(Some(connection_id.0)), answering_connection_id: ActiveValue::set(Some(connection_id.0 as i32)),
..Default::default() ..Default::default()
}) })
.exec(&tx) .exec(&tx)
@ -1488,7 +1488,7 @@ impl Database {
let project = project::ActiveModel { let project = project::ActiveModel {
room_id: ActiveValue::set(participant.room_id), room_id: ActiveValue::set(participant.room_id),
host_user_id: ActiveValue::set(participant.user_id), host_user_id: ActiveValue::set(participant.user_id),
host_connection_id: ActiveValue::set(connection_id.0), host_connection_id: ActiveValue::set(connection_id.0 as i32),
..Default::default() ..Default::default()
} }
.insert(&tx) .insert(&tx)
@ -1508,7 +1508,7 @@ impl Database {
project_collaborator::ActiveModel { project_collaborator::ActiveModel {
project_id: ActiveValue::set(project.id), project_id: ActiveValue::set(project.id),
connection_id: ActiveValue::set(connection_id.0), connection_id: ActiveValue::set(connection_id.0 as i32),
user_id: ActiveValue::set(participant.user_id), user_id: ActiveValue::set(participant.user_id),
replica_id: ActiveValue::set(ReplicaId(0)), replica_id: ActiveValue::set(ReplicaId(0)),
is_host: ActiveValue::set(true), is_host: ActiveValue::set(true),
@ -1536,7 +1536,7 @@ impl Database {
.one(&tx) .one(&tx)
.await? .await?
.ok_or_else(|| anyhow!("project not found"))?; .ok_or_else(|| anyhow!("project not found"))?;
if project.host_connection_id == connection_id.0 { if project.host_connection_id == connection_id.0 as i32 {
let room_id = project.room_id; let room_id = project.room_id;
project::Entity::delete(project.into_active_model()) project::Entity::delete(project.into_active_model())
.exec(&tx) .exec(&tx)
@ -1633,7 +1633,7 @@ impl Database {
path: ActiveValue::set(entry.path.clone()), path: ActiveValue::set(entry.path.clone()),
inode: ActiveValue::set(entry.inode as i64), inode: ActiveValue::set(entry.inode as i64),
mtime_seconds: ActiveValue::set(mtime.seconds as i64), mtime_seconds: ActiveValue::set(mtime.seconds as i64),
mtime_nanos: ActiveValue::set(mtime.nanos), mtime_nanos: ActiveValue::set(mtime.nanos as i32),
is_symlink: ActiveValue::set(entry.is_symlink), is_symlink: ActiveValue::set(entry.is_symlink),
is_ignored: ActiveValue::set(entry.is_ignored), is_ignored: ActiveValue::set(entry.is_ignored),
} }
@ -1696,7 +1696,7 @@ impl Database {
.one(&tx) .one(&tx)
.await? .await?
.ok_or_else(|| anyhow!("no such project"))?; .ok_or_else(|| anyhow!("no such project"))?;
if project.host_connection_id != connection_id.0 { if project.host_connection_id != connection_id.0 as i32 {
return Err(anyhow!("can't update a project hosted by someone else"))?; return Err(anyhow!("can't update a project hosted by someone else"))?;
} }
@ -1706,8 +1706,8 @@ impl Database {
worktree_id: ActiveValue::set(worktree_id), worktree_id: ActiveValue::set(worktree_id),
path: ActiveValue::set(summary.path.clone()), path: ActiveValue::set(summary.path.clone()),
language_server_id: ActiveValue::set(summary.language_server_id as i64), language_server_id: ActiveValue::set(summary.language_server_id as i64),
error_count: ActiveValue::set(summary.error_count), error_count: ActiveValue::set(summary.error_count as i32),
warning_count: ActiveValue::set(summary.warning_count), warning_count: ActiveValue::set(summary.warning_count as i32),
..Default::default() ..Default::default()
}) })
.on_conflict( .on_conflict(
@ -1750,7 +1750,7 @@ impl Database {
.one(&tx) .one(&tx)
.await? .await?
.ok_or_else(|| anyhow!("no such project"))?; .ok_or_else(|| anyhow!("no such project"))?;
if project.host_connection_id != connection_id.0 { if project.host_connection_id != connection_id.0 as i32 {
return Err(anyhow!("can't update a project hosted by someone else"))?; return Err(anyhow!("can't update a project hosted by someone else"))?;
} }
@ -1813,7 +1813,7 @@ impl Database {
} }
let new_collaborator = project_collaborator::ActiveModel { let new_collaborator = project_collaborator::ActiveModel {
project_id: ActiveValue::set(project_id), project_id: ActiveValue::set(project_id),
connection_id: ActiveValue::set(connection_id.0), connection_id: ActiveValue::set(connection_id.0 as i32),
user_id: ActiveValue::set(participant.user_id), user_id: ActiveValue::set(participant.user_id),
replica_id: ActiveValue::set(replica_id), replica_id: ActiveValue::set(replica_id),
is_host: ActiveValue::set(false), is_host: ActiveValue::set(false),
@ -1859,7 +1859,7 @@ impl Database {
inode: db_entry.inode as u64, inode: db_entry.inode as u64,
mtime: Some(proto::Timestamp { mtime: Some(proto::Timestamp {
seconds: db_entry.mtime_seconds as u64, seconds: db_entry.mtime_seconds as u64,
nanos: db_entry.mtime_nanos, nanos: db_entry.mtime_nanos as u32,
}), }),
is_symlink: db_entry.is_symlink, is_symlink: db_entry.is_symlink,
is_ignored: db_entry.is_ignored, is_ignored: db_entry.is_ignored,
@ -1946,7 +1946,7 @@ impl Database {
.await?; .await?;
let connection_ids = collaborators let connection_ids = collaborators
.into_iter() .into_iter()
.map(|collaborator| ConnectionId(collaborator.connection_id)) .map(|collaborator| ConnectionId(collaborator.connection_id as u32))
.collect(); .collect();
self.commit_room_transaction( self.commit_room_transaction(
@ -1955,7 +1955,7 @@ impl Database {
LeftProject { LeftProject {
id: project_id, id: project_id,
host_user_id: project.host_user_id, host_user_id: project.host_user_id,
host_connection_id: ConnectionId(project.host_connection_id), host_connection_id: ConnectionId(project.host_connection_id as u32),
connection_ids, connection_ids,
}, },
) )
@ -1977,7 +1977,7 @@ impl Database {
if collaborators if collaborators
.iter() .iter()
.any(|collaborator| collaborator.connection_id == connection_id.0) .any(|collaborator| collaborator.connection_id == connection_id.0 as i32)
{ {
Ok(collaborators) Ok(collaborators)
} else { } else {
@ -2191,8 +2191,8 @@ impl<T> DerefMut for RoomGuard<T> {
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub struct NewUserParams { pub struct NewUserParams {
pub github_login: String, pub github_login: String,
pub github_user_id: u32, pub github_user_id: i32,
pub invite_count: u32, pub invite_count: i32,
} }
#[derive(Debug)] #[derive(Debug)]
@ -2227,15 +2227,15 @@ macro_rules! id_type {
Deserialize, Deserialize,
)] )]
#[serde(transparent)] #[serde(transparent)]
pub struct $name(pub u32); pub struct $name(pub i32);
impl $name { impl $name {
#[allow(unused)] #[allow(unused)]
pub const MAX: Self = Self(u32::MAX); pub const MAX: Self = Self(i32::MAX);
#[allow(unused)] #[allow(unused)]
pub fn from_proto(value: u64) -> Self { pub fn from_proto(value: u64) -> Self {
Self(value as u32) Self(value as i32)
} }
#[allow(unused)] #[allow(unused)]
@ -2252,7 +2252,7 @@ macro_rules! id_type {
impl From<$name> for sea_query::Value { impl From<$name> for sea_query::Value {
fn from(value: $name) -> Self { fn from(value: $name) -> Self {
sea_query::Value::Unsigned(Some(value.0)) sea_query::Value::Int(Some(value.0))
} }
} }
@ -2262,7 +2262,7 @@ macro_rules! id_type {
pre: &str, pre: &str,
col: &str, col: &str,
) -> Result<Self, sea_orm::TryGetError> { ) -> Result<Self, sea_orm::TryGetError> {
Ok(Self(u32::try_get(res, pre, col)?)) Ok(Self(i32::try_get(res, pre, col)?))
} }
} }
@ -2302,11 +2302,11 @@ macro_rules! id_type {
} }
fn array_type() -> sea_query::ArrayType { fn array_type() -> sea_query::ArrayType {
sea_query::ArrayType::Unsigned sea_query::ArrayType::Int
} }
fn column_type() -> sea_query::ColumnType { fn column_type() -> sea_query::ColumnType {
sea_query::ColumnType::Unsigned(None) sea_query::ColumnType::Integer(None)
} }
} }

View file

@ -8,7 +8,7 @@ pub struct Model {
pub id: ProjectId, pub id: ProjectId,
pub room_id: RoomId, pub room_id: RoomId,
pub host_user_id: UserId, pub host_user_id: UserId,
pub host_connection_id: u32, pub host_connection_id: i32,
} }
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]

View file

@ -7,7 +7,7 @@ pub struct Model {
#[sea_orm(primary_key)] #[sea_orm(primary_key)]
pub id: ProjectCollaboratorId, pub id: ProjectCollaboratorId,
pub project_id: ProjectId, pub project_id: ProjectId,
pub connection_id: u32, pub connection_id: i32,
pub user_id: UserId, pub user_id: UserId,
pub replica_id: ReplicaId, pub replica_id: ReplicaId,
pub is_host: bool, pub is_host: bool,

View file

@ -8,12 +8,12 @@ pub struct Model {
pub id: RoomParticipantId, pub id: RoomParticipantId,
pub room_id: RoomId, pub room_id: RoomId,
pub user_id: UserId, pub user_id: UserId,
pub answering_connection_id: Option<u32>, pub answering_connection_id: Option<i32>,
pub location_kind: Option<u32>, pub location_kind: Option<i32>,
pub location_project_id: Option<ProjectId>, pub location_project_id: Option<ProjectId>,
pub initial_project_id: Option<ProjectId>, pub initial_project_id: Option<ProjectId>,
pub calling_user_id: UserId, pub calling_user_id: UserId,
pub calling_connection_id: u32, pub calling_connection_id: i32,
} }
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]

View file

@ -430,7 +430,7 @@ async fn test_fuzzy_search_users() {
false, false,
NewUserParams { NewUserParams {
github_login: github_login.into(), github_login: github_login.into(),
github_user_id: i as u32, github_user_id: i as i32,
invite_count: 0, invite_count: 0,
}, },
) )

View file

@ -8,11 +8,11 @@ pub struct Model {
#[sea_orm(primary_key)] #[sea_orm(primary_key)]
pub id: UserId, pub id: UserId,
pub github_login: String, pub github_login: String,
pub github_user_id: Option<u32>, pub github_user_id: Option<i32>,
pub email_address: Option<String>, pub email_address: Option<String>,
pub admin: bool, pub admin: bool,
pub invite_code: Option<String>, pub invite_code: Option<String>,
pub invite_count: u32, pub invite_count: i32,
pub inviter_id: Option<UserId>, pub inviter_id: Option<UserId>,
pub connected_once: bool, pub connected_once: bool,
pub metrics_id: Uuid, pub metrics_id: Uuid,

View file

@ -11,8 +11,8 @@ pub struct Model {
#[sea_orm(primary_key)] #[sea_orm(primary_key)]
pub path: String, pub path: String,
pub language_server_id: i64, pub language_server_id: i64,
pub error_count: u32, pub error_count: i32,
pub warning_count: u32, pub warning_count: i32,
} }
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]

View file

@ -14,7 +14,7 @@ pub struct Model {
pub path: String, pub path: String,
pub inode: i64, pub inode: i64,
pub mtime_seconds: i64, pub mtime_seconds: i64,
pub mtime_nanos: u32, pub mtime_nanos: i32,
pub is_symlink: bool, pub is_symlink: bool,
pub is_ignored: bool, pub is_ignored: bool,
} }

View file

@ -5383,7 +5383,7 @@ async fn test_random_collaboration(
false, false,
NewUserParams { NewUserParams {
github_login: username.clone(), github_login: username.clone(),
github_user_id: (ix + 1) as u32, github_user_id: (ix + 1) as i32,
invite_count: 0, invite_count: 0,
}, },
) )

View file

@ -381,7 +381,7 @@ impl Server {
if let Some((code, count)) = invite_code { if let Some((code, count)) = invite_code {
this.peer.send(connection_id, proto::UpdateInviteInfo { this.peer.send(connection_id, proto::UpdateInviteInfo {
url: format!("{}{}", this.app_state.config.invite_link_prefix, code), url: format!("{}{}", this.app_state.config.invite_link_prefix, code),
count, count: count as u32,
})?; })?;
} }
} }
@ -1008,7 +1008,7 @@ async fn join_project(
let collaborators = project let collaborators = project
.collaborators .collaborators
.iter() .iter()
.filter(|collaborator| collaborator.connection_id != session.connection_id.0) .filter(|collaborator| collaborator.connection_id != session.connection_id.0 as i32)
.map(|collaborator| proto::Collaborator { .map(|collaborator| proto::Collaborator {
peer_id: collaborator.connection_id as u32, peer_id: collaborator.connection_id as u32,
replica_id: collaborator.replica_id.0 as u32, replica_id: collaborator.replica_id.0 as u32,
@ -1313,7 +1313,8 @@ async fn save_buffer(
.await .await
.project_collaborators(project_id, session.connection_id) .project_collaborators(project_id, session.connection_id)
.await?; .await?;
collaborators.retain(|collaborator| collaborator.connection_id != session.connection_id.0); collaborators
.retain(|collaborator| collaborator.connection_id != session.connection_id.0 as i32);
let project_connection_ids = collaborators let project_connection_ids = collaborators
.into_iter() .into_iter()
.map(|collaborator| ConnectionId(collaborator.connection_id as u32)); .map(|collaborator| ConnectionId(collaborator.connection_id as u32));