Skip to content

Instantly share code, notes, and snippets.

@zeeshanakram3
Last active February 22, 2022 01:58
Show Gist options
  • Save zeeshanakram3/1fcd75ab5da9b01a710bd41ac2eb3eea to your computer and use it in GitHub Desktop.
Save zeeshanakram3/1fcd75ab5da9b01a710bd41ac2eb3eea to your computer and use it in GitHub Desktop.
import { IMemberRemarkedA, IMemberRemarkedB, MemberRemarkedA, MemberRemarkedB} from './compiled/index.js'
// both messages have same values
let userACreatePostMsg: IMemberRemarkedA = {
createPost: {
threadId: 1,
body: "some text"
}
}
let userBCreateCommentMsg: IMemberRemarkedB = {
createComment: {
videoId: 1,
body: "some text"
}
}
// simple msg validation, can be improved
const userAMsgError = MemberRemarkedA.verify(userACreatePostMsg)
const userBMsgError = MemberRemarkedB.verify(userBCreateCommentMsg)
if (!userAMsgError || !userBMsgError){
throw new Error(userAMsgError+ "; "+ userBMsgError)
}
const encodedCreatePostMsg = MemberRemarkedA.encode(userACreatePostMsg).finish()
// Serialized message: 5a0d08011209736f6d652074657874
// | 5a |0d08011209736f6d652074657874|
// |field no.| message |
const encodedCreateCommentMsg = MemberRemarkedB.encode(userBCreateCommentMsg).finish()
// Serialized message: aa010d08011209736f6d652074657874
// | aa01 |0d08011209736f6d652074657874|
// |field no.| message |
// Notice the `message` parts of both serialized payloads are same since the values are same
// Scenario 1: User A deserializing his own message i.e. CreatePost
const userADecodesCreatePostMsg = MemberRemarkedA.decode(encodedCreatePostMsg)
console.log(userADecodesCreatePostMsg)
/**
* Result:
* createPost: CreatePost {
* threadId: 1,
* body: 'some text'
* }
*/
// Scenario 2: User A deserializing message unknown to him, e.g. CreateComment
const userADecodesCreateCommenttMsg = MemberRemarkedA.decode(encodedCreateCommentMsg)
console.log(userADecodesCreateCommenttMsg)
/**
* Result: {}
*/
// Scenario 3: User B deserialing his own message i.e. CreateComment
const userBDecodesCreateCommentMsg = MemberRemarkedB.decode(encodedCreateCommentMsg)
console.log(userBDecodesCreateCommentMsg)
/**
* Result:
* createComment: CreateComment {
* videoId: 1,
* body: 'some text'
* }
*/
// Scenario 4: User B deserializing message unknown to him, e.g. CreatePost
const userBDecodesCreatePostMsg = MemberRemarkedB.decode(encodedCreatePostMsg)
console.log(userBDecodesCreatePostMsg)
/**
* Result: {}
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment